2012-06-18 29 views
26

Tôi đang làm việc trên một dự án trăn lớn và tôi thực sự bị bệnh nếu tệp .pyc và * ~. Tôi muốn loại bỏ chúng. Tôi đã thấy rằng cờ -X của git clean sẽ loại bỏ các tập tin không được theo dõi. Như bạn có thể tưởng tượng, tôi không theo dõi .pyc cũng không phải *~ tệp. Và điều đó sẽ làm cho lừa. Vấn đề là tôi đã có một tập tin local_settings.py mà tôi muốn giữ sau khi git sạch.Git: Loại trừ tệp có git clean

Vì vậy, đây là những gì tôi có.

.gitignore:

*.pyc 
*~ 
local_settings.py 

Khi tôi thực hiện lệnh này:

git clean -X -n -e local_settings.py 

tôi nhận được danh sách các kết quả:

Sẽ loại bỏ local_settings.py
sẽ loại bỏ yêu cầu .txt ~
Xóa (othe r bó) ~ file
Sẽ loại bỏ (bó khác) file PYC

Tôi không muốn để loại bỏ các tập tin local_settings.py. Tôi đã thử rất nhiều cách để làm điều đó, nhưng tôi không thể tìm ra cách để hoàn thành nó.

git clean -X -n -e local_settings.py 
git clean -X -n -e "local_settings.py" 
git clean -X -n --exclude=local_settings.py 
git clean -X -n --exclude="local_settings.py" 

Và không có gì có vẻ hiệu quả.

EDIT:

Đối với hậu thế, đúng cách để làm điều đó là (Cảm ơn @Rifat):

git clean -x -n -e local_settings.py # Shows what would remove (-n flag) 
git clean -x -f -e local_settings.py # Removes it (note the -f flag) 
+2

Embrace '~ .pyc's, cấu hình soạn thảo của bạn để đặt các temp/tập tin sao lưu trong thư mục khác (hay không ở tất cả) và quên đi 'git clean'ing. Đừng nuôi OCD của bạn – KurzedMetal

+0

Bạn đã cam kết * .pyc's và * ~ ​​chưa? –

+0

'git update-index --skip-worktree local_settings.py' có giúp ích gì không? –

Trả lời

13

Bạn vui lòng thử với số x thay vì số vốn ban đầu. Giống như - git clean -x

git clean -x -n -e local_settings.py # Shows what would remove (-n flag) 
git clean -x -f -e local_settings.py # Removes it (note the -f flag) 

Từ the git documentation:

-x 
     Don't use the standard ignore rules read from .gitignore (per 
     directory) and $GIT_DIR/info/exclude, but do still use the ignore 
     rules given with -e options. This allows removing all untracked 
     files, including build products. This can be used (possibly in 
     conjunction with git reset) to create a pristine working directory 
     to test a clean build. 

    -X 
     Remove only files ignored by git. This may be useful to rebuild 
     everything from scratch, but keep manually created files. 
+0

Đây là nó! Cảm ơn nhiều! – santiagobasulto

0

Nếu bạn đang chạy Python 2.6+ chỉ cần thiết lập các biến môi trường, PYTHONDONTWRITEBYTECODE , đến true. Bạn chỉ có thể thêm dòng sau vào một cái gì đó giống như .profile hoặc .bashrc để vô hiệu hóa nó hoàn toàn cho hồ sơ của bạn:

export PYTHONDONTWRITEBYTECODE=true 

Hoặc, nếu bạn chỉ muốn làm điều đó cho một dự án cụ thể bạn đang làm việc, bạn sẽ cần phải chạy trên trong vỏ của bạn mỗi lần (hoặc trong một trong các tập lệnh init virtualenv của bạn nếu bạn đang sử dụng virtualenv và virtualenvwrapper), hoặc bạn có thể chỉ cần chuyển tham số -B khi bạn gọi python, ví dụ

python -B manage.py runserver 
0

Nếu bạn đã cam kết của PYC và vân vân rồi, làm như sau:

Add * pyc, * ~ và local_settings.py vào .gitignore. Sau đó làm trong kho git của bạn:

find . -name '*.pyc' | xargs rm 
find . -name '*~' | xargs rm 

sau đó làm:

git commit -am "get rif of them" 

bây giờ họ không nên làm phiền bạn nữa

8
git clean -X -n --exclude="!local_settings.py" 

công trình. Tôi phát hiện ra điều này khi tôi googled và có this page.

+0

Đẹp! Cảm ơn bạn. :) Tôi đã phải rời khỏi '!' Trong vỏ của mình, nhưng nó đã hoạt động. – Vimes

1

Tôi đặt các tệp cục bộ nằm trong danh mục này bằng .git/info/exclude (ví dụ: tệp dự án IDE của tôi). Họ bạn có thể làm sạch như thế này:

git ls-files --others --exclude-from=.git/info/exclude -z | \ 
    xargs -0 --no-run-if-empty rm --verbose 

đâu:

  • --others: hiển thị file untracked
  • --exclude-từ: cung cấp một git tiêu chuẩn bỏ qua tập tin phong cách để loại trừ từ danh sách
  • -z/-0: sử dụng \ 0 thay vì \ n chia tên
  • --no-run-if-rỗng: không chạy rm nếu danh sách rỗng

Bạn có thể tạo một bí danh, ví dụ .:

git config --global alias.myclean '!git ls-files --others --exclude-from=.git/info/exclude -z | xargs -0 --no-run-if-empty rm --verbose --interactive' 

Các --interactive có nghĩa là bạn phải làm git myclean -f để buộc xoá.

tham khảo: http://git-scm.com/docs/git-ls-files (cộng với dòng đầu tiên của .git default/info/loại trừ)

Các vấn đề liên quan