Câu hỏi Thực hiện .gitignore bỏ qua mọi thứ ngoại trừ một vài tệp


Tôi hiểu rằng một tập tin .gitignore che giấu các tệp được chỉ định từ phiên bản của Git điều khiển. Tôi có một dự án (LaTeX) tạo nhiều tệp phụ (.auth, .dvi, .pdf, logs, vv) khi nó chạy, nhưng tôi không muốn chúng được theo dõi.

Tôi biết rằng tôi có thể (có thể nên) làm cho nó để tất cả những tập tin đó được đưa vào thư mục con riêng biệt trong dự án, vì sau đó tôi có thể bỏ qua thư mục.

Tuy nhiên, có cách nào khả thi để giữ các tệp đầu ra trong thư mục gốc của cây dự án và sử dụng .gitignore để bỏ qua mọi thứ ngoại trừ các tệp tôi theo dõi với Git? Cái gì đó như

# Ignore everything
*

# But not these files...
script.pl
template.latex
# etc...

1170
2018-06-12 15:04


gốc


Bản sao của stackoverflow.com/q/9162919/321973 (Tôi biết đó là mới hơn, nhưng câu trả lời có chính xác hơn). Thực ra câu trả lời này có lẽ là tốt nhất - Tobias Kienzler


Các câu trả lời:


Tiền tố tùy chọn ! phủ nhận mẫu; bất kỳ tệp trùng khớp nào bị loại trừ bởi   một mẫu trước đó sẽ được bao gồm một lần nữa. Nếu một mẫu phủ định phù hợp,   điều này sẽ ghi đè các nguồn mẫu có mức ưu tiên thấp hơn.

# Ignore everything
*

# But not these files...
!.gitignore
!script.pl
!template.latex
# etc...

# ...even if they are in subdirectories
!*/

# if the files to be tracked are in subdirectories
!*/a/b/file1.txt
!*/a/b/c/*

1708
2018-06-12 15:07



Dường như điều này cũng 'bỏ qua' thư mục con, chẳng hạn như bất kỳ tệp nào có tên 'script.pl' trong bất kỳ mục nào khác ngoài thư mục gốc sẽ không được tìm thấy. Tôi đang sử dụng tệp này ngay bây giờ (với * .pl) và tất cả * .pl đang bị bỏ qua mặc dù có nhiều thư mục con bên dưới tệp .gitignore - PandaWood
@PandaWood Vấn đề đó đã được đưa ra đây (stackoverflow.com). Đó là do biểu thức đầu tiên khớp với mọi thứ bao gồm các thư mục mà bạn không bao giờ phủ nhận. Để khắc phục, hãy thêm (! * /), Khớp với bất kỳ thư mục phụ nào (đệ quy) trong thư mục hiện tại. Điều này sẽ không giúp phụ huynh trả lời, là các tệp cụ thể trong danh sách trắng (nếu chúng nằm trong thư mục con, bạn có thể muốn chỉ định đường dẫn đầy đủ theo cách thủ công hoặc sử dụng tệp .gitignore cụ thể cho thư mục). - simont
Tôi không thể làm việc này được. Tôi đang bỏ qua một thư mục (ví dụ: wp/) nhưng tôi KHÔNG muốn bỏ qua một số tệp sâu trong thư mục đó (ví dụ: wp/path/to/some/location/*). Cách duy nhất tôi có thể làm cho nó hoạt động là bằng cách làm git add -f wp/path/to/some/location/* - trusktr
@trusktr Sử dụng simont's !*/ ngoại lệ - Tobias Kienzler
Geez rằng quy tắc cuối cùng: !*/ làm cho tất cả sự khác biệt trong những nỗ lực vô ích của tôi để giải quyết một .gitignore tệp để hoạt động. Cảm ơn nhiều. - racl101


Nếu bạn muốn bỏ qua toàn bộ nội dung của một thư mục ngoại trừ một tệp bên trong nó, bạn có thể viết một cặp quy tắc cho mỗi thư mục trong đường dẫn tệp. Ví dụ: .gitignore bỏ qua thư mục pippo ngoại trừ từ pippo / pluto / paperino.xml

.gitignore

pippo/*
!pippo/pluto
pippo/pluto/*
!pippo/pluto/paperino.xml

488
2018-05-01 12:31



Câu trả lời tuyệt vời, nhưng đáng chú ý cho bất cứ ai đi qua điều này sau đó foo và foo/* là không phải giống nhau. Để làm việc này, bạn nhu cầu sử dụng foo/* cho thư mục cơ sở - thislooksfun
@Mayank Pippo là Goofy bằng tiếng Ý trong khi Paperino là Donald Duck và Pluto giống như trong tiếng Anh. Chúng từng là một bộ ba tên biến rất phổ biến cho các mẫu lập trình trở lại trong những ngày này. Thật tuyệt khi đọc chúng lần nữa .. :) - Ghidello
Những gì @thislooksfun nói là quan trọng nếu bạn muốn "loại trừ một thư mục ngoại trừ tập tin x". - Czechnology
không hoạt động với tôi: node_modules / *! node_modules / bootstrap - SuperUberDuper
bạn phải bao gồm !.gitignore hoặc người nào khác điều này sẽ không hoạt động. .gitignore tập tin cũng sẽ không bị git bởi git - suhailvs


Bạn muốn sử dụng /* thay vì * hoặc là */ trong hầu hết các trường hợp

Sử dụng * là hợp lệ, nhưng nó hoạt động đệ quy. Nó sẽ không nhìn vào các thư mục từ đó trở đi. Mọi người khuyên bạn nên sử dụng !*/ vào danh sách trắng một lần nữa, nhưng nó thực sự tốt hơn để đưa vào danh sách đen thư mục cấp cao nhất /*

# Blacklist files/folders in same directory as the .gitignore file
/*

# Whitelist some files
!.gitignore
!README.md

# Ignore all files named .DS_Store or ending with .log
**/.DS_Store
**.log

# Whitelist folder/a/b1/ and folder/a/b2/
# trailing "/" is optional for folders, may match file though.
# "/" is NOT optional when followed by a *
!folder/
folder/*
!folder/a/
folder/a/*
!folder/a/b1/
!folder/a/b2/

Đoạn mã trên sẽ bỏ qua tất cả các tệp ngoại trừ .gitignore, README.md, folder/a/b1/ và folder/a/b2/ và mọi thứ chứa trong hai thư mục đó. (Và .DS_Store và *.log các tệp sẽ bị bỏ qua trong các thư mục đó.)

Rõ ràng tôi có thể làm ví dụ !/folder hoặc là !/.gitignore quá.

Thêm thông tin: http://git-scm.com/docs/gitignore


141
2018-04-29 00:31



Rất thông minh, cảm ơn. IMO, đây là cách tốt nhất để tìm hiểu về các trang web WordPress với số quy tắc bao gồm tối thiểu. Ngoài ra, mọi plugin, chủ đề hoặc bản cập nhật WP mới không bị xóa hoặc thêm mà không có sự cho phép rõ ràng của bạn. Khi sử dụng GitHub Desktop tôi tìm thấy .DS_Store các tệp không bị bỏ qua, nhưng thông qua dòng lệnh, đây không phải là vấn đề. Để giải quyết vấn đề này, tôi phải di chuyển **/.DS_Store bên dưới tất cả các quy tắc khác. - Jibran
Công cụ đánh dấu cú pháp bên trong của tôi đang có phản ứng lạ với tiêu đề bài đăng của bạn. - itsadok
Gracias! bạn cũng có thể đưa vào danh sách trắng một tệp trong thư mục ..! /some/folder/file.txt - PodTech.io


Cụ thể hơn một chút:

Ví dụ: Bỏ qua mọi thứ trong webroot/cache - nhưng giữ webroot/cache/.htaccess.

Chú ý dấu gạch chéo (/) sau cache thư mục:

FAILS

webroot/cache*
!webroot/cache/.htaccess

CÔNG TRINH

webroot/cache/*
!webroot/cache/.htaccess

57
2017-08-13 13:23





# ignore these
*
# except foo
!foo

49
2018-06-12 15:06





Để bỏ qua một số tệp trong một thư mục, bạn phải làm điều này trong theo đúng thứ tự:

Ví dụ, bỏ qua mọi thứ trong thư mục "application" ngoại trừ index.php và folder "config" chú ý đến thứ tự.

Bạn phải phủ nhận muốn bạn muốn đầu tiên.

FAILS

application/*

!application/config/*

!application/index.php

CÔNG TRINH

!application/config/*

!application/index.php

application/*


23
2017-08-09 08:39



Sai rồi. Bạn phủ nhận sau "bỏ qua mọi thứ". - EdMelo
nó không hoạt động ở đây - Totty.js
Đừng bị lừa bởi git status để kiểm tra xem các thay đổi của bạn có .gitignore làm việc như mong đợi - Philippe Rathé
Nếu git status sẽ không nói cho bạn biết nó đang xem cái gì và cái gì bị bỏ qua, vậy làm thế nào bạn có thể biết được điều này có hiệu quả không? - kris


Bạn có thể dùng git config status.showUntrackedFiles no và tất cả các tập tin không được theo dõi sẽ bị ẩn khỏi bạn. Xem man git-config để biết chi tiết.


18
2018-06-12 15:20