Sự khác biệt giữa .gitignore và .gitkeep là gì?


1926

Sự khác biệt giữa .gitignorevà là .gitkeepgì? Có phải chúng giống nhau với một tên khác nhau, hoặc cả hai đều phục vụ một chức năng khác nhau?

Tôi dường như không thể tìm thấy nhiều tài liệu về .gitkeep.

Câu trả lời:


3440

.gitkeep không được ghi lại, vì đó không phải là một tính năng của Git.

Git không thể thêm một thư mục hoàn toàn trống . Những người muốn theo dõi các thư mục trống trong Git đã tạo ra quy ước đặt các tệp được gọi .gitkeeptrong các thư mục này. Các tập tin có thể được gọi là bất cứ điều gì; Git gán không có ý nghĩa đặc biệt cho tên này.

Có một quy ước cạnh tranh là thêm một .gitignoretệp vào các thư mục trống để theo dõi chúng, nhưng một số người thấy điều này là khó hiểu vì mục tiêu là giữ các thư mục trống, không bỏ qua chúng; .gitignorecũng được sử dụng để liệt kê các tệp nên bị Git bỏ qua khi tìm kiếm các tệp không bị theo dõi.


414
Sẽ không phải là một giải pháp tốt hơn để đặt một READMEtệp vào thư mục con trống có chứa một chút thông tin về thư mục con đó sẽ được sử dụng để làm gì? Có vẻ khó hiểu khi có một tệp được gọi .gitkeeplà không thực sự là một phần của git.
tamouse

423
@tamouse nhiều lần, đường dẫn của thư mục trống (ví dụ: tên của các thư mục) là đủ để thể hiện mục đích của nó (ví dụ: mẫu / bộ đệm, tải lên / ngón tay cái, v.v.). Trong những trường hợp này, đặt một readme vào mỗi trong số này cảm thấy dư thừa.
Halil zgür

16
những người muốn theo dõi các thư mục trống nên cho biết trong README rằng thư mục phải được tạo hoặc tạo các thư mục bằng công cụ xây dựng của họ hoặc bất kỳ công cụ nào yêu cầu thư mục tồn tại; /

32
@tamouse, @omouse: Một .gitignoretệp có hai dòng: *!.gitignorequá rõ ràng để truyền đạt những gì đang diễn ra. Nếu cần thêm chi tiết, hãy thêm một nhận xét vào đầu tệp bằng # cú pháp.
Dropogans

63
Cần lưu ý rằng khung Rails phổ biến đã thay đổi một chút quy ước này bằng cách sử dụng .keepcác tệp thay vì .gitkeepđể bảo vệ các thư mục trống này, vì git không phải là hệ thống kiểm soát nguồn duy nhất không theo dõi các thư mục trống. Thêm chi tiết tại đây: github.com/rails/rails/issues/2800
Claudio Floreani

330

.gitkeepchỉ là một giữ chỗ. Một tệp giả, vì vậy Git sẽ không quên thư mục, vì Git chỉ theo dõi các tệp.


Nếu bạn muốn có một thư mục trống và đảm bảo nó vẫn 'sạch' cho Git, hãy tạo một thư mục .gitignorechứa các dòng sau trong:

# .gitignore sample
###################

# Ignore all files in this dir...
*

# ... except for this one.
!.gitignore

Nếu bạn muốn chỉ có một loại tệp được hiển thị cho Git, đây là một ví dụ về cách lọc mọi thứ, ngoại trừ .gitignore và tất cả .txtcác tệp:

# .gitignore to keep just .txt files
###################################

# Filter everything...
*

# ... except the .gitignore...
!.gitignore

# ... and all text files.
!*.txt

('#' cho biết ý kiến.)


3
Tôi thích thực hành này bản thân mình. Nếu có mã nguồn trong các thư mục này thì sẽ không cần .gitkeep và nói chung, đó là nội dung temp / cache / user mà trong quá trình kiểm tra sẽ được tạo ra dù sao bạn cũng phải .gitignore các tệp đó
chrisan

1
Tại sao bạn cần !ở phía trước .gitignore? Có phải đó là để thoát khỏi dấu chấm?
Sẽ

7
@ Will - Không, phần !phủ định phần sau, giống như phần thường làm trong lập trình.
sjas

3
Không cần phải đặt !.gitignoretệp bỏ qua git, thêm tệp sau đó chỉnh sửa hoặc buộc thêm tệp có nội dung phù hợp ("*" để bỏ qua mọi thứ hoặc không có gì đơn giản để đảm bảo thư mục tồn tại) ví dụ thêm .
AD7six

13
Từ liên kết của bạn: Since the git ignore file is already in the repo it is not necessary to not-ignore it - it is already tracked.------ Nếu không, và bạn không thực hiện một bổ sung mạnh mẽ, bạn có thể quên nó. Trong các trường hợp tầm thường, không có vấn đề gì, nhưng nếu đó là một tệp lớn hơn, bạn có thể khó chịu. Sử dụng !.gitignorengăn bạn tự bắn vào chân mình. Tôi thích nó, đã tự thiêu trong quá khứ.
sjas

125
.gitignore

là một tệp văn bản bao gồm một danh sách các tệp trong thư mục của bạn mà git sẽ bỏ qua hoặc không thêm / cập nhật trong kho lưu trữ.

.gitkeep

Vì Git xóa hoặc không thêm các thư mục trống vào kho lưu trữ, .gitkeep là một loại hack (tôi không nghĩ nó được đặt tên chính thức như một phần của Git) để giữ các thư mục trống trong kho lưu trữ.

Chỉ cần làm một touch /path/to/emptydirectory/.gitkeepđể thêm tệp, và Git bây giờ sẽ có thể duy trì thư mục này trong kho lưu trữ.


18
Bạn có thể có nhiều .gitignores như bạn muốn, nếu bạn không muốn chỉ định đường dẫn đầy đủ cho mọi thư mục mỗi lần.
sjas

1
Tôi cố gắng đề cập đến danh sách thư mục trống vào .gitkeeptệp nhưng nó sẽ không theo dõi thư mục trống, Chỉ theo dõi thư mục nơi .gitkeeptệp tồn tại. tại sao như vậy ?
Pardeep Jain

2
.gitkeep không hoạt động như .gitignore. Nó không phải là một danh sách các thư mục để giữ xung quanh. Nó chỉ đơn thuần là một tập tin trống nằm trong thư mục bạn muốn giữ xung quanh. Nó có thể được đặt tên bất cứ thứ gì bạn muốn .keep, v.v. Vì vậy, bạn có thể có một thư mục như / foo / bar và tệp gitkeep sẽ là /foo/bar/.gitkeep
Jim Munro

@sjas làm thế nào để có nhiều .gitignores giúp bạn tiết kiệm từ việc chỉ định đường dẫn đầy đủ đến mọi thư mục mỗi lần? Tôi nghĩ rằng tôi đang thiếu một cái gì đó rõ ràng.
Willwsharp
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.