Tôi có một tệp gitignore làm cho git bỏ qua *.dll
các tệp và đó thực sự là hành vi tôi muốn. Tuy nhiên, nếu tôi muốn một ngoại lệ (nghĩa là có thể cam kết foo.dll
), làm thế nào tôi có thể đạt được điều này?
Tôi có một tệp gitignore làm cho git bỏ qua *.dll
các tệp và đó thực sự là hành vi tôi muốn. Tuy nhiên, nếu tôi muốn một ngoại lệ (nghĩa là có thể cam kết foo.dll
), làm thế nào tôi có thể đạt được điều này?
Câu trả lời:
Sử dụng:
*.dll #Exclude all dlls
!foo.dll #Except for foo.dll
Từ gitignore :
Một tiền tố tùy chọn! trong đó phủ nhận mô hình; bất kỳ tệp phù hợp nào được loại trừ bởi một mẫu trước đó sẽ được đưa vào lại. Nếu một mẫu phủ định phù hợp, điều này sẽ ghi đè các nguồn mẫu ưu tiên thấp hơn.
*.dll
trong đó, và gitignore dự án của tôi có !Libs/*.dll
nhưng điều đó dường như không hoạt động.
!Libs/**/*.dll
.
!**/Libs/*.dll
, tùy thuộc vào cấu trúc thư mục.
!foo.dll
đã làm mất hiệu lực lệnh. Nếu tôi thêm nhận xét trên một hàng riêng biệt, nó hoạt động.
Git bỏ qua các thư mục nếu bạn viết:
/js
nhưng nó không thể thêm ngoại lệ nếu bạn làm:
!/js/jquery
hoặc !/js/jquery/
hoặc!/js/jquery/*
Bạn phải viết:
/js/*
và chỉ sau đó bạn có thể ngoại trừ các thư mục con như thế này
!/js/jquery
!/js/jquery/xyzlib
sẽ không bị bỏ qua ...
/js/*
, !/js/jquery
, /js/jquery/*
, !/js/jquery/xyzlib
? Cảm thấy giống như một cách khá thú vị để làm điều đó ...
Bạn có thể đơn giản git add -f path/to/foo.dll
.
.gitignore
chỉ bỏ qua các tệp để theo dõi thông thường và những thứ như git add .
-f
git nói buộc phải thêm tệp này vào repo vì nó có thể bỏ qua trước vì.gitignore
Để loại trừ mọi thứ trong một thư mục, nhưng một số thư mục con, hãy làm như sau:
wp-content/*
!wp-content/plugins/
!wp-content/themes/
Chỉ cần thêm !
trước một quy tắc loại trừ.
Theo trang người đàn ông gitignore :
Các mẫu có định dạng sau:
...
- Một tiền tố tùy chọn! trong đó phủ nhận mô hình; bất kỳ tệp phù hợp nào được loại trừ bởi một mẫu trước đó sẽ được đưa vào lại. Nếu một mẫu phủ định phù hợp, điều này sẽ ghi đè các nguồn mẫu ưu tiên thấp hơn.
!foo.dll
trong .gitignore hoặc (mọi lúc!) git add -f foo.dll
Nếu bạn đang làm việc với Visual Studio và tình huống của bạn nằm trong một bin
thư mục, thì bạn sẽ cần thêm một ngoại lệ cho chính thư mục bin cụ thể đó, trước khi bạn có thể thêm ngoại lệ cho tệp dll. Ví dụ
!SourceCode/Solution/Project/bin
!SourceCode/Solution/Project/bin/My.dll
Điều này là do .gitignore
tệp Visual Studio mặc định bao gồm một mẫu bỏ qua cho[Bbin]/
Mẫu này đang hạ gục tất cả các thư mục bin (và do đó là nội dung của chúng), điều này khiến cho mọi nỗ lực bao gồm các nội dung đều dư thừa (vì chính thư mục đã bị bỏ qua).
Tôi đã có thể tìm thấy lý do tại sao tập tin của tôi không bị loại trừ bằng cách chạy
git check-ignore -v -- SourceCode/Solution/Project/bin/My.dll
từ cửa sổ Git Bash. Điều này trả về [Bbin]/
mô hình.
Giải pháp phụ thuộc vào mối quan hệ giữa quy tắc bỏ qua git và quy tắc ngoại lệ:
Tệp / Tệp ở các cấp khác nhau hoặc Tệp / Thư mục con: bạn có thể làm điều này:
*.suo
*.user
*.userosscache
*.sln.docstates
# ...
# Exceptions for entire subfolders
!SetupFiles/elasticsearch-5.0.0/**/*
!SetupFiles/filebeat-5.0.0-windows-x86_64/**/*
# Exceptions for files in different levels
!SetupFiles/kibana-5.0.0-windows-x86/**/*.suo
!SetupFiles/logstash-5.0.0/**/*.suo
Vì Git 2.7.0 Git sẽ đưa ngoại lệ vào tài khoản. Từ ghi chú phát hành chính thức:
- Cho phép "! / Abc / def" sau đó ghi đè lên "/ abc" trước đó xuất hiện trong cùng một tệp .gitignore để dễ dàng thể hiện "mọi thứ trong thư mục / abc đều bị bỏ qua, ngoại trừ ...".
https://raw.githubusercontent.com/git/git/master/Documentation/RelNotes/2.7.0.txt