Thêm .gitignore vào gitignore


138

Có thể thêm .gitignoretập tin vào .gitignorechính nó?

.gitignore

Không hoạt động mặc dù

Tôi không muốn nhìn thấy nó trong các tập tin chỉnh sửa


8
Tại sao bạn muốn làm điều đó? chỉ cam kết thay đổi của bạn. .gitignoređược cho là một phần của kho lưu trữ của bạn, liệt kê các mẫu tệp là rác cho dự án.
KurzingMetal

1
.gitignorephải là một phần của kho lưu trữ của bạn, để mọi người trong nhóm của bạn bỏ qua hoặc kiểm tra trong cùng một tệp. Chỉ vì .gitignoretrong thư mục mã của bạn ở đâu đó không có nghĩa là bạn phải triển khai nó.
Ryan Lundy


bạn có thể sử dụng git rm --cached .gitignorevà untracking .gitignore
hassanzadeh.sd

Câu trả lời:


169

Các .gitignoremục đích của tập tin là để ngăn chặn tất cả những người cộng tác trong một dự án vô tình commiting một số tập tin phổ biến trong một dự án, chẳng hạn như các file bộ nhớ cache được tạo ra. Vì vậy, bạn không nên bỏ qua.gitignore , vì nó được cho là có trong kho lưu trữ.

Nếu bạn muốn bỏ qua các tệp chỉ trong một kho lưu trữ nhưng muốn tránh cam kết danh sách bỏ qua (ví dụ: đối với các tệp cá nhân), bạn có thể thêm chúng vào .git/info/exclude vào kho lưu trữ đó.

Nếu bạn muốn bỏ qua các tệp nhất định trên mọi kho lưu trữ trên máy của mình, bạn có thể tạo tệp ~/.gitignore_globalrồi chạy

git config --global core.excludesfile ~/.gitignore_global

35

Một .gitignore có thể tự bỏ qua nếu nó chưa bao giờ được đăng ký:

mhaase@ubuntu:~$ git --version
git version 1.7.9.5
mhaase@ubuntu:~$ git init temp
Initialized empty Git repository in /home/mhaase/temp/.git/
mhaase@ubuntu:~$ cd temp
mhaase@ubuntu:~/temp$ touch .gitignore foo bar baz bat
mhaase@ubuntu:~/temp$ git status
# On branch master
#
# Initial commit
#
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#       .gitignore
#       bar
#       bat
#       baz
#       foo
mhaase@ubuntu:~/temp$ echo "foo" >> .gitignore
mhaase@ubuntu:~/temp$ echo ".gitignore" >> .gitignore
mhaase@ubuntu:~/temp$ git status
# On branch master
#
# Initial commit
#
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#       bar
#       bat
#       baz
nothing added to commit but untracked files present (use "git add" to track)

Nếu bạn đăng ký .gitignore (trước khi bạn bảo nó bỏ qua chính nó), thì nó sẽ luôn hiển thị ở trạng thái git, ngay cả khi sau đó bạn sửa đổi nó để bỏ qua chính nó.


1
Chính xác, đây là trường hợp của tôi. Tôi muốn có một địa phương .gitignoređể làm việc với git-svn, mà không ai nên thấy. Vì vậy, tôi chỉ cần thêm nó vào chính nó và nó chỉ hoạt động. Nhưng sau đó tôi đã googled để xem nếu một số người tăng cường sẽ giải thích cho những người khác làm thế nào là "xấu". Câu trả lời này nên được chấp nhận, và sau đó tôi cũng sẽ đưa ra các .git/info/excludeđề xuất. Vì vậy, nó chỉ cần được giải mã ... Không có gì đáng ngạc nhiên, ít nhất là nếu bạn đã từng bị "lật đổ" (svn).
Tomasz Gandor

Tôi có .gitignoretập tin sao lưu đầu tiên. Sau đó, tôi sử dụng git rm .gitignorevà cam kết thay đổi đó. Cuối cùng, thêm và cam kết .gitignoretập tin một lần nữa với quy tắc cho .gitignore. Nó hoạt động!
qzhang

3
Để khắc phục điều này bạn có thể chạy git rm --cached .gitignore.
Gideon

18

Không thực sự có một lý do tốt để làm điều này. Nếu bạn muốn các tệp bị bỏ qua chỉ cho bản sao của mình, hãy thêm chúng vào .git / thông tin / loại trừ, chứ không phải .gitignore


tôi nhận được "Không thể hoàn thành thao tác vì những thay đổi hiện có đối với tệp sau" và tệp mà nó liệt kê là tệp tôi có loại trừ. Bất cứ ý tưởng tại sao?
Paul McCarthy

3

Sau khi bạn nhập .gitignorevào tệp gitignore của mình, hãy thử cách sau,

git rm -r --cached .
git add --all
git commit -m "ignoring gitignore"
git push --set-upstream origin master

Nó sẽ hoạt động mặc dù như đã nói, bỏ qua gitignore có thể phản tác dụng nếu repo của bạn được chia sẻ bởi nhiều người dùng.


2

Có bạn có thể; bạn vẫn thấy nó trong các tệp đã chỉnh sửa vì nó vẫn được theo dõi bởi git và các tệp được theo dõi bởi git luôn được đánh dấu là đã sửa đổi ngay cả khi chúng ở .gitignore. Vì vậy, chỉ đơn giản là mở khóa nó.

Nhưng tại sao không cam kết hoặc đặt lại những thay đổi mà bạn có trên đó? Đó là một cách tốt hơn nhiều để loại bỏ nó khỏi trạng thái ... Ngoài ra, hãy lưu ý rằng bất kỳ bản sao mới nào của bạn repo sẽ phải thêm nó .gitignore, điều này có thể gây phiền nhiễu.


Có, và bạn sẽ cần phải loại bỏ nó khỏi git bởi got rm --cached .gitignore, có lẽ.
Tadeck

git rm --cached .gitignore đang xóa khỏi git. Đó là phá hoại và không mong muốn. Làm thế nào để chỉ có .gitignore bỏ qua cho bản sao địa phương?
javadba

0

Bạn có thể đạt được điều này bằng cách viết nó vào tệp .gitignore của bạn. Các *sẽ thêm tất cả mọi thứ để bỏ qua danh sách và sau đó !.gitignoresẽ loại bỏ các tập tin .gitignore từ bỏ qua danh sách.

*
!.gitignore

3
Điều này đạt được điều ngược lại với những gì OP muốn
Dmitry Parzhitsky

Vâng, chính xác, tôi đã đề cập tương tự. *sẽ bỏ qua mọi thứ. Bao gồm các .gitignoretập tin.
Ankit Singh

1
Ý tôi là, OP đang cố gắng loại bỏ các .gitignoretập tin từ codebase (bằng cách thêm vào chính nó, mà không thực sự có ý nghĩa, nhưng tôi là ai để phán xét). Ở đây tôi có thể thấy một đề xuất đảm bảo rằng tệp không bao giờ bị bỏ qua, điều này có nghĩa là nó tồn tại trong (được thêm vào) cơ sở mã
Dmitry Parzhitsky

Đúng rồi. Các câu hỏi dường như xoắn. Nhưng ổn thôi.
Ankit Singh
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.