2012-05-16 6 views
7

Sau khi đọc một số câu hỏi về .gitignore tôi đã tìm thấy không ai có thể trả lời câu hỏi của tôi:bỏ qua tập tin nhất định trong tất cả các thư mục sử dụng một tập tin duy nhất .gitignore

Tôi phải làm gì để thêm vào .gitignore để bỏ qua tất cả các file với một kết thúc nhất định, giả sử *.txt trong tất cả các thư mục.

Tôi muốn chỉ có một tệp .gitignore ở cấp cao nhất.

Tôi đã thử nhiều thứ nhưng không có tác dụng nào.

Đây là những gì tôi thử nghiệm (.gitignore được bổ sung vào kho lưu trữ trước đó, không có tập tin khác đã được bổ sung):

$ ls 
    abc.txt content 

    $ ls content/ 
    abc.txt def.other def.txt 

    $ echo "" > .gitignore 


    $ git status --ignored --untracked-files=all 
    # On branch master 
    # Changes not staged for commit: 
    # (use "git add <file>..." to update what will be committed) 
    # (use "git checkout -- <file>..." to discard changes in working directory) 
    # 
    #  modified: .gitignore 
    # 
    # Untracked files: 
    # (use "git add <file>..." to include in what will be committed) 
    # 
    #  abc.txt 
    #  content/abc.txt 
    #  content/def.other 
    #  content/def.txt 
    no changes added to commit (use "git add" and/or "git commit -a") 

này được như mong đợi: tất cả các file xuất hiện kể từ khi .gitignore trống.

$ echo "*.txt" > .gitignore 

    $ git status --ignored --untracked-files=all 
    # On branch master 
    # Changes not staged for commit: 
    # (use "git add <file>..." to update what will be committed) 
    # (use "git checkout -- <file>..." to discard changes in working directory) 
    # 
    #  modified: .gitignore 
    # 
    # Untracked files: 
    # (use "git add <file>..." to include in what will be committed) 
    # 
    #  content/def.other 
    # Ignored files: 
    # (use "git add -f <file>..." to include in what will be committed) 
    # 
    #  abc.txt 
    no changes added to commit (use "git add" and/or "git commit -a") 

Tại sao nội dung/abc.txt và nội dung/def.txt hiển thị trong danh sách?

$ git clean -n 
    Would not remove content/ 

Tôi nghĩ chúng cũng sẽ hiển thị ở đây.

$ echo "" > .gitignore 

    $ git clean -n 
    Would remove abc.txt 
    Would not remove content/ 

    $ cd content 

    $ git clean -n -x 
    Would remove def.other 

    $ git clean -n -x 
    Would remove abc.txt 
    Would remove def.other 
    Would remove def.txt 

Nếu các tập tin nội dung/abc.txt và content/def.txt được trình bày bởi clean -n -x nhưng không phải bởi clean -n, tôi nghĩ rằng họ đang bị bỏ qua. Nhưng tại sao chúng không hiển thị trong git status --ignored --untracked-files=all?

Trả lời

3

Chỉ cần thêm *.txt hoạt động. Kiểm tra gitignore(5) man page để có giải thích về định dạng gitignore

Nếu bạn cố thêm thư mục content, tất cả các tệp *.txt sẽ bị bỏ qua.

$ echo "*.txt" > .gitignore 

$ git add content 

$ git status --ignored --untracked-files=all 
# On branch master 
# 
# Initial commit 
# 
# Changes to be committed: 
# (use "git rm --cached <file>..." to unstage) 
# 
#  new file: content/def.other 
# 
# Untracked files: 
# (use "git add <file>..." to include in what will be committed) 
# 
#  .gitignore 
# Ignored files: 
# (use "git add -f <file>..." to include in what will be committed) 
# 
#  abc.txt 
#  content/abc.txt 
#  content/def.txt 
+1

Dường như lý do vì 'tình trạng git --ignored --untracked-file = all' không hiển thị các tập tin trong thử nghiệm của bạn có cái gì để làm với các "thư mục không được theo dõi" (bạn thực sự có thể 't theo dõi các thư mục, chỉ các tập tin, nhưng khi tôi theo dõi một tập tin bên trong thư mục mà chúng xuất hiện) – KurzedMetal

+0

Điều đó có hiệu quả. Mặc dù 'git clean -fx' chỉ xóa các tệp trong nội dung sau khi thư mục chứa tệp được theo dõi. Nếu không, tôi đã phải gọi lệnh trong thư mục chính nó để loại bỏ các tập tin! – Onur