Cách chỉ loại trừ tệp khỏi thư mục gốc trong Git


399

Tôi biết sử dụng .gitignoretệp để loại trừ một số tệp đang được thêm, nhưng tôi có một số config.phptệp trong cây nguồn và tôi chỉ cần loại trừ một tệp, nằm trong thư mục gốc trong khi các tệp khác giữ dưới sự kiểm soát sửa đổi.

Tôi nên viết gì .gitignoređể thực hiện điều này?

Câu trả lời:


589

Từ tài liệu :

Nếu mẫu không chứa dấu gạch chéo /, git coi nó là mẫu toàn cầu shell và kiểm tra sự trùng khớp với tên đường dẫn liên quan đến vị trí của tệp .gitignore (liên quan đến toplevel của cây công việc nếu không phải từ .gitignore tập tin).

Một dấu gạch chéo hàng đầu khớp với phần đầu của tên đường dẫn. Ví dụ: "/*.c" khớp với "cat-file.c" chứ không phải "mozilla-sha1 / sha1.c".

Vì vậy, bạn nên thêm dòng sau vào root của bạn .gitignore:

/config.php

1
Cảm ơn bạn! Tôi đã thử nó theo cách này, nhưng vì một số lý do nó không hoạt động. Có lẽ bị nhầm ở đâu đó =)
Pavel Karoukin

1
Điều gì xảy ra nếu đó không phải là một tệp, mà là một thư mục và tôi muốn bỏ qua thư mục đó trong gốc repo, các tệp chứa trong đó và tất cả các thư mục con hậu duệ và các tệp của chúng? /folder/?
CodeManX

11
Hoặc /folder/hoặc /foldersẽ hoạt động, nhưng việc thêm dấu gạch chéo ở cuối chỉ giới hạn khớp với các thư mục. Nếu bạn có một tệp có tên 'foo' trong thư mục gốc, /foo/sẽ không bỏ qua nó, nhưng /foosẽ.
tehDorf

Trong trường hợp bạn đã cam kết tệp, hãy chạy lệnh git rm --cached <file>, nếu không tệp sẽ không bị bỏ qua. Từ: stackoverflow.com/a/1274447
Bruno Polo


29

Các phiên bản cũ hơn của git yêu cầu bạn trước tiên xác định mẫu bỏ qua và ngay lập tức (trên dòng tiếp theo) xác định loại trừ. [đã thử nghiệm trên phiên bản 1.9.3 (Apple Git-50)]

/config.php
!/*/config.php

Các phiên bản mới hơn chỉ yêu cầu [thử nghiệm trên phiên bản 2.2.1] sau đây

/config.php

17

Nếu giải pháp trên không hiệu quả với bạn, hãy thử điều này:

#1.1 Do NOT ignore file pattern in  any subdirectory
!*/config.php
#1.2 ...only ignore it in the current directory
/config.php

##########################

# 2.1 Ignore file pattern everywhere
config.php
# 2.2 ...but NOT in the current directory
!/config.php

Điều này thực sự làm việc cho tôi, trong khi /config.phpmột mình thì không. Tôi tò mò tại sao nó không. Bạn có một ý tưởng?
iago-lito 'xem xét rời khỏi

@ iago-lito nếu bạn làm việc với một dự án cụ thể nào đó và đấu tranh về việc làm thế nào để bỏ qua một số file.ext trong một thư mục cụ thể và đồng thời KHÔNG bỏ qua nó ở mọi nơi khác, sau đó đặt tệp này vào /home/me/.gitignore: /home/me/path/to/my/project/some/folder/file.ext HOẶC file.ext để bỏ qua tệp ở mọi nơi và sau đó trong / home / me / path / to / my / project / some / thư mục / Tệp .gitignore đặt tệp này! file.ext để KHÔNG bỏ qua tệp này chỉ trong thư mục cụ thể này. Mỗi thư mục có thể có tệp .gitignore riêng để
QUÁ TRÌNH

Hừm. Điều này có nghĩa là repo có thể hoạt động khác nhau tùy thuộc vào việc người dùng khác có các ~/.gitignoretệp khác nhau trên máy của họ không? .. Bên cạnh đó, quan điểm của tôi là: Bạn đã viết "Nếu giải pháp trên không hoạt động", tại sao nó lại không?
iago-lito 'xem xét rời khỏi

có, nếu dự án của bạn có thể tồn tại trong môi trường không xác định thì bạn không bao giờ nên dựa vào các tệp .gitignore tồn tại phía trên thư mục gốc của dự án. Hãy nhớ rằng tên tệp như config.php khá phổ biến vì vậy ghi đè mọi cài đặt có thể có cho tệp này trong tệp .gitignore gốc của bạn.
ma túy
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.