.gitignore loại trừ tệp cụ thể


94

Tôi đang cố gắng sử dụng .gitignoretệp để loại trừ templates.jsnằm trong public/app/thư mục. .gitignoreTệp của tôi trông như thế này:

/vendor
/node_modules
composer.phar
composer.lock
.DS_Store
templates.js

Nhưng khi tôi kiểm tra trong Git Gui, templates.jstệp vẫn hiển thị trong đó. Làm cách nào để loại trừ cụ thể một tệp bằng cách sử dụng .gitignore?


2
Điều đó có nghĩa là tệp đã được thêm vào kho lưu trữ trước đó? .gitignorechỉ bỏ qua nội dung được thêm vào.
Willem Van Onsem

2
@CommuSoft Có, nó đã được thêm vào kho lưu trữ trước đây. Vì vậy, làm thế nào tôi có thể loại trừ nó ngay bây giờ? Cách làm của tôi có .gitignoređúng không?
user1995781

Câu trả lời:


152

Ngược lại với những gì tên "bỏ qua" có thể gợi ý. .gitignorechỉ được tham khảo khi bạn gửi git addtệp: nói cách khác, tệp đã được thêm vào (chỉ mục của) kho lưu trữ sẽ không bị loại trừ dựa trên .gitignore.

Trước tiên, bạn nên sửa đổi .gitignoređể tệp không còn được thêm vào nữa. Thêm dòng sau vào .gitignoretệp:

public/app/template.js

Tiếp theo, bạn cần loại trừ tệp khỏi kho lưu trữ. Có thể bạn không muốn xóa tệp khỏi hệ thống tệp của mình, điều này có thể được thực hiện bằng:

git rm --cached public/app/template.js

Các --cachedcờ đảm bảo các tập tin sẽ không được gỡ bỏ khỏi hệ thống tập tin của bạn. (Nếu không quan trọng, bạn có thể sử dụng git rm public/app/template.js, nhưng điều này sẽ xóa tệp ).

Lý lịch

Lý do .gitignorekhông được chủ động sử dụng là vì đôi khi bạn có thể muốn ghi đè .gitignore. Ví dụ: bạn không muốn theo dõi *.logtệp, bạn có thể chỉ định *.logtrong .gitignore. Nhưng nếu có một số cụ thể bạn muốn theo dõi, bạn có thể thêm git add -f some.log. Các -flực lượng cờ gitđể thêm các tập tin.


một người cứu mạng, đã để thông tin đăng nhập của tôi được công khai
mLstudent33

21

Khi một tệp đã được 'thêm' vào kho lưu trữ git một lần, nó sẽ tiếp tục được theo dõi bất kể nó có được liệt kê trong tệp .gitignore hay không.

Tôi đoán bạn đã thêm tệp template.js trước đó, trong trường hợp đó, tệp sẽ tiếp tục được theo dõi các thay đổi cho đến khi bạn xóa nó khỏi kho lưu trữ. Khi tệp đã bị xóa khỏi kho lưu trữ, tệp sẽ được bỏ qua đúng cách thông qua tệp .gitignore.

Cách để xóa một tệp khỏi kho lưu trữ git (dòng lệnh) mà không xóa nó là

git rm --cached FILENAME

Sau đó, một khi bạn làm điều đó và cố gắng cam kết với tệp trong gitignore của mình, nó sẽ không thực hiện được.

Lưu ý rằng nếu bạn thêm cụ thể một tệp mà bạn có trong gitignore của mình, thì việc thêm tệp theo cách thủ công của bạn sẽ ghi đè lên gitignore.


Cảm ơn thân yêu, "git rm --cached FILENAME" hoạt động như một sự quyến rũ :)
Kamlesh

11

Nếu bạn đang theo dõi một tệp ( git addtrên đó và git commit), .gitignoresẽ không giúp được gì.

Tôi tin rằng những gì bạn muốn là ngừng theo dõi một tệp và sau đó sử dụng .gitignoređể loại trừ nó. Để ngừng theo dõi tệp nhưng vẫn giữ tệp, hãy sử dụng:

git rm --cached <file>


không dv, nhưng tôi nghĩ bạn có lẽ nên chọn từ của bạn tốt hơn. giữ nó trong kho lưu trữ hơi trái ngược với việc giữ nó trên hệ thống tệp cục bộ của bạn . Một kho lưu trữ không ánh xạ trên hệ thống tệp ...
Willem Van Onsem

@CommuSoft Đã khắc phục sự hài lòng, tôi không quá cẩn thận vì người khác đã trả lời nó tốt hơn. Cám ơn vì sự gợi ý.
Ross

7

Trong trường hợp này, bạn có thể ngừng theo dõi templates.jsbằng

git rm --cached public/app/templates.js

Như những người khác đã giải thích, .gitignorechỉ bỏ qua nội dung được thêm vào. Ví dụ: nếu bạn thường xuyên sử dụng git add .và có templates.jstrong của bạn .gitignore, thì git sẽ không thêm nó.

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.