Buộc thêm mặc dù tệp .gitignore


413

Có cách nào để buộc gitthêm tệp bất chấp .gitignoretệp không?


4
Một câu hỏi tốt hơn có thể là - tại sao bạn muốn làm điều đó? Nếu bạn muốn một tệp được theo dõi, bỏ đánh dấu nó (tiền tố mẫu của nó trong .gitignoretệp với !, vd !dont/ignore/this/file).
Ohad Schneider

6
@OhadSchneider Điều này rất hữu ích nếu bạn buộc (các) tệp xây dựng cam kết với một nhánh khác. Một vài dự án làm điều này như StrongLoop để triển khai an toàn
Deminetix

5
@OhadSchneider Đối với chúng tôi, đó là vì nhiều nhà phát triển cài đặt git với Visual Studio 2015, bổ sung một gitignore toàn cầu vào thư mục người dùng. Điều này không bao gồm các tệp như * đậm và * .exe. Điều đó thật tuyệt vời cho các dự án mới của chúng tôi chỉ sử dụng các gói nuget được truy xuất trong quá trình xây dựng, nhưng đối với một số ít dự án cũ, chúng tôi vẫn sử dụng các dll được tham chiếu thủ công trong giải pháp. Đối với các dự án đó, chúng tôi muốn bao gồm chúng theo cách thủ công, thay vì yêu cầu mọi nhà phát triển nhận xét các tệp * đậm và * .exe trong gitignore toàn cầu.
Nullius

4
@Nullius Bạn không thể chỉ định chúng ở cấp độ cao hơn .gitignore(giả sử, thêm một .gitignoretrong cùng thư mục với dll, hoặc một ở trên, hoặc một cái gì đó)?
Ohad Schneider

Câu trả lời:


569

Xem man git-add:

   -f, --force
       Allow adding otherwise ignored files.

Vì vậy, chạy này

git add --force my/ignore/file.foo

11
Uhm không hoạt động, trên trạng thái git, tệp vẫn không được hiển thị
Đánh dấu

5
Vâng, tôi đã thử nghiệm nó để đảm bảo nó thực sự hoạt động và nó hoạt động. Bạn có thể mô tả môi trường của bạn (HĐH, phiên bản git ...) không? Đây là những gì tôi đã thực hiện cơ bản: echo "/foo" >> .gitignore; echo "bar" > foo; git add foo # should throw an error; git add -p foo # works(không thể dán các dòng mới trong nhận xét, thực hiện các lệnh 1 by 1
Daniel Böhmer

4
Điều tương tự cũng xảy ra với tôi, trước đây tôi đã chạy git update-index - không thay đổi trên các tập tin của tôi. Tôi đã phải hoàn tác nó với - không giả định-không thay đổi và nó đã hoạt động
Jako

4
Điều này chỉ hoạt động đối với tôi bằng cách sử dụng ký tự đại diện, sử dụng git 1.9.5 trên Windows, ngay cả sau khi thử - không - giả sử không thay đổi. "git add - f <filename>" không làm gì cả, nhưng "git add -f *" hoạt động. Sử dụng TortoiseGit cũng hoạt động.
mhenry1384

@ mhenry1384 Lý do nó chỉ hoạt động cho ký tự đại diện trong Windows có thể là do cách phân tách đường dẫn được sử dụng. Đối với tôi dấu gạch chéo "/" hoạt động nhưng dấu gạch chéo ngược "\" không. Thực tế là cmd / PowerShell chuyển đổi "/" thành "\" đối với chúng tôi giúp bạn dễ dàng chạy vào đây.
ohw

19

Bất chấp giải pháp làm việc của Daniel Böhmer, Ohad Schneider đã đưa ra một giải pháp tốt hơn trong một bình luận:

Nếu tệp thường bị bỏ qua và bạn buộc phải thêm nó - nó có thể vô tình bị bỏ qua một lần nữa trong tương lai (như khi tệp bị xóa, thì một cam kết được thực hiện và tệp được tạo lại.

Bạn chỉ nên bỏ qua nó trong tệp .gitignore như thế: Unignore thư mục con của các thư mục bị bỏ qua trong Git


4
Chính xác. Tôi đã sử dụng tùy chọn --force cho các tệp dữ liệu nhỏ, sau đó sắp xếp lại một chút cấu trúc thư mục và ghi đè tất cả các tệp theo dõi lực lượng. TUY NHIÊN: đang .gitignoresử dụng !specific-file-name.txtmà không có hệ thống phân cấp thư mục, theo dõi theo cách này sẽ theo tệp xung quanh repo.
Merlin

Nó phụ thuộc vào kịch bản, ví dụ: đôi khi bạn muốn loại trừ "1.txt" trong tất cả các thư mục và đôi khi "thư mục1 / *. Txt"
NHƯ

14
Đó không phải là một giải pháp "tốt hơn". Đó là một giải pháp cho một vấn đề khác.
aij

2

Một cách khác để đạt được nó là chỉnh sửa tạm thời tệp gitignore, thêm tệp và sau đó hoàn nguyên lại gitignore. Một chút hack tôi cảm thấy


10
Tôi đồng ý, đây không phải là điều bạn muốn làm.
Merlin
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.