bỏ qua bất kỳ thư mục 'bin' nào trong dự án git


1236

Tôi có một cấu trúc thư mục như thế này:

.git/
.gitignore
main/
  ...
tools/
  ...
...

Bên trong chính và các công cụ, và bất kỳ thư mục nào khác, ở mọi cấp độ, có thể có một thư mục 'bin', mà tôi muốn bỏ qua (và tôi cũng muốn bỏ qua mọi thứ trong đó). Tôi đã thử từng mẫu này trong .gitignore nhưng không có mẫu nào hoạt động:

/**/bin/**/*
/./**/bin/**/*
./**/bin/**/*
**/bin/**/*
*/bin/**/*
bin/**/*
/**/bin/* #and the others with just * at the end too

Bất cứ ai có thể giúp tôi ra? Mẫu đầu tiên (mẫu tôi nghĩ nên hoạt động) chỉ hoạt động tốt nếu tôi làm điều này:

/main/**/bin/**/*

Nhưng tôi không muốn có một mục nhập cho mọi thư mục cấp cao nhất và tôi không muốn phải sửa đổi .gitignore mỗi khi tôi thêm một thư mục mới.

Đây là trên Windows sử dụng msysgit mới nhất.

EDIT: một điều nữa, có những tập tin và thư mục có chuỗi con 'bin' trong tên của chúng, tôi không muốn chúng bị bỏ qua :)


14
Có lẽ ai đó sẽ thấy hữu ích: nếu bạn có một vài kho lưu trữ và mỗi tệp có cùng một tệp .gitignore, bạn có thể đặt nó vào vị trí "chung" và khởi chạy> git config --global core.excludesfile ~ / .gitignore_global Tham số cuối cùng là đường dẫn đến vị trí chung. PS Tôi mới sử dụng git và không chắc đó có phải là đề xuất 'thực tiễn tốt nhất' hay không. Vì vậy, xin vui lòng cho tôi biết nếu bạn không muốn làm điều đó. Cảm ơn bạn.
Budda

Các **cú pháp bây giờ có vẻ (tháng 3 năm 2013, git 1.8.2) chính thức ghi nhận: thấy câu trả lời của tôi dưới đây
VonC

2
Nếu bất cứ ai muốn đọc phiên bản cập nhật nhất của trang hướng dẫn thực tế, hãy xem Trang hướng dẫn của gitignore (5) .

lựa chọn thân thiện hơn nếu bạn đang mệt mỏi của tiểu luận đọc cho giá trị một dòng thông tin của atlassian.com/git/tutorials/saving-changes/...
suazithustra

Câu trả lời:


1834

Trước phiên bản 1.8.2, **không có bất kỳ ý nghĩa đặc biệt nào trong .gitignore. Kể từ 1.8.2 git hỗ trợ **có nghĩa là không hoặc nhiều thư mục con (xem ghi chú phát hành ).

Cách bỏ qua tất cả các thư mục được gọi là bin ở bất kỳ đâu dưới mức hiện tại trong cây thư mục là với một .gitignoretệp có mẫu:

bin/

Trong mantrang, có một ví dụ về việc bỏ qua một thư mục được gọi foobằng cách sử dụng một mẫu tương tự.

Chỉnh sửa: Nếu bạn đã có bất kỳ thư mục bin nào trong chỉ mục git của mình mà bạn không còn muốn theo dõi thì bạn cần phải xóa chúng một cách rõ ràng. Git sẽ không dừng theo dõi các đường dẫn đã được theo dõi chỉ vì chúng hiện khớp với một .gitignoremẫu mới . Thực hiện một thư mục loại bỏ ( rm ) khỏi chỉ mục ( --cached ) đệ quy ( -r ). Ví dụ dòng lệnh cho thư mục bin gốc:

git rm -r --cached bin

72
Bắt đầu với git 1.8.2, git sẽ chấp nhận **trong .gitignorecác tệp (nguồn: 1.8.2 changelog )
Carlos Campderrós

15
bingiống nhau của bin/?
Nisba

29
@Nisba, chúng khác nhau, binsẽ bỏ qua các tệp có tên bin, trong khi bin/dành cho các thư mục có tên bin
Rani Kheir

8
kể từ khi tôi gặp phải vấn đề này: tên thư mục trong trường hợp git-lệnh IS nhạy cảm :) "bin! = Bin" - có lẽ tôi dành cho ai đó vài phút bởi gợi ý này :)
dba

1
Trong windows10, bạn không thể tạo tệp .gitignore, bạn phải tạo gitignore.txt và sau đó chạy ren gitignore.txt .gitignore trong dấu nhắc lệnh để tạo tệp này
shabby

463

Các .gitignoregiấc mơ của bạn có vẻ là:

bin/

ở cấp độ cao nhất.


Cảm ơn bạn rất nhiều vì sự giúp đỡ của bạn, đừng quên kiểm tra ví dụ về các tập tin bị bỏ qua: git checkout bin *
Chris Sim

1
đặt nó trong gitignore_global
λὼ

@GAlexander, tại sao mọi người lại muốn bỏ qua bin / thư mục trên toàn cầu? Họ thường có nội dung phiên bản. Và bỏ qua toàn cầu sẽ không ảnh hưởng đến người dùng khác của kho lưu trữ.
Michael Krelin - hacker

234

Tôi nghĩ rằng nó là giá trị để đề cập cho người mới bắt đầu git:

Nếu bạn đã có một tệp được kiểm tra và bạn muốn bỏ qua nó, Git sẽ không bỏ qua tệp nếu bạn thêm quy tắc sau . Trong những trường hợp đó, bạn phải hủy theo dõi tệp trước, bằng cách chạy lệnh sau trong thiết bị đầu cuối của bạn:

git rm --cached

Vì vậy, nếu bạn muốn thêm bỏ qua một số thư mục trong kho lưu trữ cục bộ của bạn (đã tồn tại) sau khi chỉnh sửa .gitignore bạn muốn chạy thư mục này trên thư mục gốc của bạn

git rm --cached -r .
git add .

Về cơ bản, nó sẽ 'làm mới' repo cục bộ của bạn và bỏ qua các tập tin bị bỏ qua.

Xem:

http://git-scm.com/docs/git-rm ,

https://help.github.com/articles/ignoring-files/


nếu tôi thường làm một git add -Acam kết của mình, tôi có thể sử dụng nó thay thế không? và tôi có thể thay thế dấu chấm bằng -A trên dòng đầu tiên không?
ajax333221

69

Việc này **chưa bao giờ hoạt động đúng trước đây, nhưng kể từ git 1.8.2 (tháng 3, 8 năm 2013) , nó dường như được đề cập và hỗ trợ rõ ràng:

Các mẫu trong .gitignore.gitattributestệp có thể có **/, dưới dạng mẫu khớp với 0 hoặc nhiều cấp thư mục con .

Ví dụ: " foo/**/bar" khớp " bar" trong " foo" chính nó hoặc trong thư mục con của " foo".

Trong trường hợp của bạn, điều đó có nghĩa là dòng này hiện có thể được hỗ trợ:

/main/**/bin/

46
[Bb]in/

phù hợp với cả chữ hoa và chữ thường


2
[B]in/là chữ hoa duy nhất
Gank

Làm thế nào để chỉ Binthư mục bỏ qua và cho phép bincam kết git? [B]in/sẽ cả hai cam kết Binbin.
Gank

4
Điều này sẽ làm điều đó, @Gank: Bin/ !bin/
Marco G

34

Tôi đã không thấy nó được đề cập ở đây, nhưng điều này dường như là trường hợp nhạy cảm. Khi tôi thay đổi thành / Bin, các tệp sẽ bị bỏ qua như mong đợi.


3
Đây không phải là một câu trả lời cho câu hỏi ban đầu rõ ràng bin, không phải Bin.
CB Bailey

49
Mặc dù không phải là một câu trả lời, nhưng nó làm tăng thêm tính đầy đủ cho những người khác đang tìm kiếm về cùng một vấn đề (bản thân tôi, chỉ là bây giờ).
Jay

25

[Bb]in sẽ giải quyết vấn đề, nhưng ... Ở đây một danh sách rộng lớn hơn về những điều bạn nên bỏ qua (danh sách mẫu của GitExtension):

#ignore thumbnails created by windows
Thumbs.db
#Ignore files build by Visual Studio
*.user
*.aps
*.pch
*.vspscc
*_i.c
*_p.c
*.ncb
*.suo
*.bak
*.cache
*.ilk
*.log
[Bb]in
[Dd]ebug*/
*.sbr
obj/
[Rr]elease*/
_ReSharper*/

3
Lưu ý: Những thứ như thế này phải có trong gitignore GLOBAL của bạn (thường là trong thư mục chính của bạn.) Gitignore dự án chỉ nên bỏ qua những thứ cụ thể cho dự án của bạn (ví dụ: tệp .o cho ứng dụng C.)
BraveNewCurrency 13/2/2015


18

Bước 1: Thêm nội dung sau vào tệp .gitignore.

# User-specific files
*.suo
*.user
*.userosscache
*.sln.docstates

# Build results
[Dd]ebug/
[Dd]ebugPublic/
[Rr]elease/
[Rr]eleases/
x64/
x86/
bld/
[Bb]in/
[Oo]bj/

# Visual Studio 2015 cache/options directory
.vs/

Bước 2: Đảm bảo có hiệu lực

Nếu sự cố vẫn còn tồn tại, đó là vì cài đặt trong .gitignore chỉ có thể bỏ qua các tệp ban đầu không được theo dõi . Nếu một số tệp đã được bao gồm trong hệ thống kiểm soát phiên bản, thì sửa đổi .gitignore không hợp lệ. Để giải quyết vấn đề này hoàn toàn, bạn cần mở Git Bash hoặc Bảng điều khiển quản lý gói (xem ảnh chụp màn hình bên dưới) để chạy các lệnh sau trong thư mục gốc của kho lưu trữ.

$ git rm -r --cached .
$ git add .
$ git commit -m 'Update .gitignore'

Bảng điều khiển PM Sau đó, vấn đề sẽ được giải quyết hoàn toàn.


8

Theo nghĩa đen, không có câu trả lời nào thực sự hiệu quả với tôi; người duy nhất làm việc cho tôi là (trên Linux):

**/bin
(yes without the / in the end)

git version 2.18.0 

Điều đó có bỏ qua tất cả các thư mục có tên bintrong thư mục con không?
leo

5

Như một thông báo;

Nếu bạn nghĩ về .gitignoreviệc không hoạt động theo cách (đã thêm foo/*thư mục trong đó nhưng git statusvẫn hiển thị (các) nội dung thư mục đó đã được sửa đổi hoặc đại loại như thế này), thì bạn có thể sử dụng lệnh này;

git checkout -- foo/*


3

cho 2.13.3 trở đi, chỉ viết bin trong tệp .gitignore của bạn sẽ bỏ qua bin và tất cả các thư mục con và tệp của nó

thùng rác


2

Việc thêm ** / bin / vào tệp .gitignore đã giúp tôi (Lưu ý: thư mục bin không được thêm vào chỉ mục).


1

Nếu mô hình bên trong .gitignorekết thúc bằng dấu gạch chéo/ , nó sẽ chỉ tìm thấy kết quả khớp với một thư mục.

Nói cách khác, bin/sẽ khớp với một thư mục binvà các đường dẫn bên dưới nó, nhưng sẽ không khớp với một tệp thông thường hoặc một liên kết tượng trưng bin.


Nếu mẫu không chứa dấu gạch chéo , như trong binGit coi nó là mẫu toàn cầu vỏ (tham lam). Vì vậy, tốt nhất sẽ được sử dụng đơn giản /bin.

bin sẽ không phải là giải pháp tốt nhất cho vấn đề đặc biệt này.


Ý bạn là 'bắt đầu bằng' a /?
leo

0

Trong trường hợp mã hóa tệp gitignore của tôi có vấn đề, hãy kiểm tra xem nó có phải là UTF-8 không

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.