Bỏ qua các thư mục trong kho Git trên Windows


1106

Làm cách nào tôi có thể bỏ qua các thư mục hoặc thư mục trong Git bằng msysgit trên Windows?


Bạn có muốn loại bỏ hoàn toàn thư mục bộ đệm khỏi kho lưu trữ hay chỉ nội dung của nó?
Gareth

1
Tôi đoán rằng OP có nhiều thư mục bộ đệm, có nội dung nên được bỏ qua, nhưng muốn đảm bảo rằng các thư mục đó được tạo cho bất kỳ ai sao chép kho lưu trữ.
Mark Longair

@Gareth: vì các thư mục trống không được theo dõi bằng git, nếu nội dung bị bỏ qua, thư mục cũng sẽ như vậy, phải không?
eckes

3
Tôi chỉ đề cập rằng vì một số người sử dụng các tệp ẩn (thông thường .gitkeep) để chỉ ra một thư mục nên được lưu giữ
Gareth

2
/vào cuối những gì làm cho nó biết một thư mục của nó nên bỏ qua?
Charlie Parker

Câu trả lời:


1595

Tạo một tệp có tên .gitignoretrong thư mục dự án của bạn. Bỏ qua các thư mục bằng cách nhập tên thư mục vào tệp (có thêm dấu gạch chéo):

dir_to_ignore/

Thêm thông tin ở đây .


130
Trong lời nhắc cmd của windows, bạn có thể sử dụng 'chỉnh sửa .gitignore' hoặc 'notepad .gitignore' để tạo tệp chính xác.
Joey Green

44
Hoặc bạn cũng có thể sử dụng 'touch .gitignore' từ trong dấu nhắc lệnh git bash của windows và điều đó sẽ tạo ra tệp có tên chính xác, sau đó có thể được chỉnh sửa bằng notepad hoặc tương tự ...
SGB

39
Hoặc chỉ cần tạo một tệp có tên .gitignore. với explorer và chỉnh sửa nó bằng notepad (dấu chấm sẽ bị xóa). Bằng cách đó bạn không phải sử dụng dấu nhắc lệnh.
P. Galbraith

6
Hoặc bạn có thể vim .gitignore từ thiết bị đầu cuối. :)
MollyCat

34
Hoặc, điều đáng ngạc nhiên đã không được đề cập mặc dù đó là cách nhanh nhất, chỉ cần gõ "echo thư mục_to_ignore >> .gitignore" trong bảng điều khiển.
Godsmith

205

Theo mặc định, Windows Explorer sẽ hiển thị .gitignorekhi trên thực tế tên tệp là .gitignore.txt.

Git sẽ không sử dụng .gitignore.txt

Và bạn không thể đổi tên tệp thành .gitignore, vì Windows Explorer cho rằng đó là tệp loại gitignore không có tên.

Giải pháp dòng lệnh không:

Bạn có thể đổi tên một tệp thành ".gitignore." và nó sẽ tạo ra ".gitignore"

46
Điều đó có hiệu quả? Tôi đã luôn bảo mọi người mở notepad và trong hộp thoại Save As, tên tệp được bao quanh bởi doublequote, ví dụ như vậy ".gitignore"và nó sẽ lưu nó mà không cần tự động thêm tiện ích mở rộng.
Arrowmaster

9
Khéo léo. Bao gồm một khoảng thời gian kéo dài không hoạt động. Explorer loại bỏ giai đoạn cuối cùng, dẫn đến một tệp có tên ".gitignore". Tôi nghĩ rằng phương pháp trích dẫn là sạch hơn và ít có khả năng tạo ra sự ngạc nhiên.
Triynko

4
Hoặc, trong hộp thoại Lưu với tên, thay đổi loại tệp thành "Tất cả tệp ( . )" - sau đó Windows sẽ không nối thêm bất kỳ tiện ích mở rộng nào.
OsakaWebbie

5
hoặc trong git bash, chỉ cần gõ "touch .gitignore" trong thư mục của bạn
Rayjax

3
".gitignore."- Đây là một mẹo hay! Tôi cũng luôn gặp rắc rối với .htaccess...
Obmerk Kronen

105

Dường như để bỏ qua các tập tin và thư mục có hai cách chính:

  1. .gitignore

    • Đặt .gitignoretệp vào .gitthư mục gốc của kho lưu trữ bên cạnh thư mục (trong Windows, đảm bảo bạn thấy phần mở rộng tệp thực sự và sau đó thực hiện .gitignore.(với điểm ở cuối để tạo phần mở rộng tệp trống))
    • Tạo cấu hình toàn cầu ~/.gitignore_globalvà chạy git config --global core.excludesfile ~/.gitignore_globalđể thêm cấu hình này vào cấu hình Git của bạn

    Lưu ý: các tệp được theo dõi trước đó có thể được theo dõi bằng cách chạy git rm --cached filename

  2. Kho lưu trữ loại trừ - Đối với các tệp cục bộ không cần chia sẻ, bạn chỉ cần thêm mẫu tệp hoặc thư mục vào tệp .git/info/exclude. Các quy tắc của luận án không được cam kết, vì vậy chúng không được người dùng khác nhìn thấy . Thêm thông tin ở đây .

Để tạo ngoại lệ trong danh sách các tệp bị bỏ qua, hãy xem câu hỏi này .


36
công việc tốt chỉ ra git rm --cached <filename>. Hoàn toàn quan trọng đối với các repos tồn tại TRƯỚC KHI bạn đã tạo.gitignore
MaurerPower

2
git rm --cached <filename> đã khắc phục sự cố tôi gặp phải với .gitignore :)
JeremyFelix 17/03/13

1
Yeah git rm - tên tập tin là hoàn toàn quan trọng. Nó làm tôi phát điên vì git vẫn đang dàn dựng các tập tin mà tôi tuyên bố rõ ràng bị bỏ qua (tạo gitignore sau lần cam kết ban đầu). Cảm ơn rât nhiều!
Potaito

1
Giải quyết vấn đề của tôi. Git đã theo dõi thư mục nhà cung cấp trong repo laravel của tôi mặc dù tôi đã thêm thư mục nhà cung cấp trong gitignore. Cảm ơn rất nhiều.
Jayant

44

Tôi đã có một số vấn đề tạo ra một tập tin trong Windows Explorer với .lúc đầu.

Một cách giải quyết là đi vào phần lệnh và tạo một tệp mới bằng cách sử dụng "chỉnh sửa".


2
hoặc chỉ thêm một phần bổ sung .vào cuối để explorer ngừng suy nghĩ .gitignorelà phần mở rộng. Sau đó, trên mục đó dấu chấm không có phần mở rộng chỉ bị ăn và bạn còn lại với .gitignore TL; DR: hãy thử đặt tên cho nó .gitignore.=> bạn kết thúc với.gitignore
leerssej

43

Để hướng dẫn Git bỏ qua các tệp hoặc thư mục nhất định, bạn phải tạo .gitignoretệp.

Nhưng trong Windows Explorer, bạn phải cung cấp tên cho tệp. Bạn chỉ không thể tạo tập tin chỉ với một phần mở rộng. Thủ thuật là tạo một tệp văn bản trống và đi đến dấu nhắc lệnh và thay đổi tên của tệp thành .gitignore:

ren "New Text Document.txt" .gitignore

Bây giờ hãy mở tệp bằng trình soạn thảo văn bản yêu thích của bạn và thêm tên tệp / thư mục mà bạn muốn bạn bỏ qua. Bạn cũng có thể sử dụng các ký tự đại diện như thế này : *.txt.


15
Hoặc chỉ: echo dir_to_ignore /> .gitignore
Oliver

2
Hoặc type nul > .gitignoređể tạo một tập tin trống
Fidel Roy

Hoặc chỉ gọi tệp .gitignore.khi phần mở rộng tệp không bị ẩn trong Windows explorer của bạn
Vairis

22

Nếu bạn muốn duy trì một thư mục chứ không phải các tệp bên trong nó, chỉ cần đặt tệp ".gitignore" vào thư mục có "*" làm nội dung. Tập tin này sẽ khiến Git bỏ qua tất cả nội dung từ kho lưu trữ. Nhưng .gitignoresẽ được bao gồm trong kho lưu trữ của bạn.

$ git add path/to/folder/.gitignore

Nếu bạn thêm một thư mục trống, bạn sẽ nhận được thông báo này (.gitignore là một tệp ẩn)

The following paths are ignored by one of your .gitignore files:
path/to/folder/.gitignore
Use -f if you really want to add them.
fatal: no files added

Vì vậy, sử dụng "-f" để buộc thêm:

$ git add path/to/folder/.gitignore -f

19

Trong Windows có thêm một dấu gạch chéo. Không bao gồm một thư mục trong .gitignore với

dir_to_exclude /

sẽ có thể làm việc, nhưng loại trừ tất cả các thư mục với

/

gây ra sự cố khi bạn có tên tệp có khoảng trắng (như my file.txt) trong thư mục của mình: Git Bash thoát các khoảng trắng này bằng dấu gạch chéo ngược (như my\ file.txt) và Git cho Windows không phân biệt giữa /\.

Để loại trừ tất cả các thư mục, sử dụng tốt hơn:

** /

Hai dấu hoa thị liên tiếp biểu thị nội dung thư mục.


15

Ngoài ra trong \.git\infothư mục dự án của bạn có một tệp loại trừ có hiệu quả tương tự như .gitignore(tôi nghĩ). Bạn có thể thêm các tập tin và thư mục để bỏ qua trong đó.


Tôi thích cách tiếp cận này, tôi không thể hòa hợp với đường dẫn trong đó, tôi muốn bỏ qua một thư mục trong repo chính, làm thế nào?
Shimmy Weitzhandler

Nhưng bạn không nên để các tệp trong .git một mình (thao tác nội dung thông qua các phương tiện chính thức)?
Peter Mortensen

13

Chỉ trong trường hợp bạn cần loại trừ các thư mục con, bạn có thể sử dụng **ký tự đại diện để loại trừ mọi cấp độ của thư mục con.

**/build/output/Debug/

12

Để bỏ qua toàn bộ thư mục trong Git, cách dễ nhất là bao gồm tệp .gitignore trong thư mục đích chỉ chứa "*".

Một ví dụ minh họa,

Hệ thống ví dụ

/root/
    .gitignore
    /dirA/
        someFile1.txt
        someFile2.txt
    /dirB/
        .gitignore
        someFile3.txt
        someFile4.txt

Mục tiêu

  • bỏ qua nội dung của / dirB /

Cấp cao nhất .gitignore (/root/.gitignore)

  • Đây là nơi thông tin gitignore tiêu chuẩn của bạn đi

Thư mục bị bỏ qua .gitignore (/root/dirB.gitignore)

  • Tệp này chỉ đọc là '*' và thư mục bị bỏ qua hoàn toàn, chính nó và tất cả các tệp!

Và nó thật đơn giản :)


10

Khi mọi thứ khác không thành công, hãy thử chỉnh sửa tệp

/.git/info/exclude

và thêm các thư mục bạn muốn vào cuối tệp, như thế này:

# git ls-files --others --exclude-from=.git/info/exclude
# Lines that start with '#' are comments.
# For a project mostly in C, the following would be a good set of
# exclude patterns (uncomment them if you want to use them):
# *.[oa]
# *~
assets/
compiled/

Tôi đã thêm các thư mục "tài sản" và "biên dịch" vào danh sách các tập tin và thư mục để bỏ qua.


1
Tôi đang sử dụng Atom trên Windows 10. Nó hoạt động! Cảm ơn anh bạn!
Putu De

Tôi đã thử tất cả những cái khác với cấu hình hiện tại của tôi và đây là câu trả lời dứt khoát cuối cùng của tôi.
Xedret

9

Trên Unix:

touch .gitignore

Trên Windows:

echo > .gitignore

Các lệnh này được thực thi trong một thiết bị đầu cuối sẽ tạo một .gitignoretệp ở vị trí hiện tại.

Sau đó, chỉ cần thêm thông tin vào .gitignoretệp này (ví dụ sử dụng Notepad ++) những tệp hoặc thư mục nào sẽ bị bỏ qua. Lưu các thay đổi của bạn. Đó là nó :)

Thêm thông tin: .gitignore


9

Bạn có thể tạo tệp ".gitignore" với nội dung:

*
!.gitignore

Nó làm việc cho tôi.


2
Đây là câu trả lời tốt nhất, nó cũng mang lại lợi ích gia tăng trong việc triển khai và bảo trì dự án.
Nitin ...

Ai là "simples" ?
Peter Mortensen

8

Tôi đã gặp một số vấn đề khi nhận Git để lấy .gitignoretệp trên Windows. Các $GIT_DIR/info/excludetập tin dường như luôn luôn làm việc mặc dù.

Tuy nhiên, nhược điểm của phương pháp này là các tệp trong $GIT_DIRthư mục không được bao gồm trong đăng ký và do đó không được chia sẻ.

ps $GIT_DIRthường là thư mục ẩn có tên.git


Vâng, git trên windows thực sự rất khó hiểu về .gitignore - tệp loại trừ cục bộ thực hiện những gì tôi cần. Cảm ơn!
andersop

6

Tôi giả sử vấn đề là cây làm việc của bạn giống như:

a-cache/foo
a-cache/index.html
b-cache/bar
b-cache/foo
b-cache/index.html
.gitignore

... với những .gitignoregì bạn mô tả. Điều này sẽ cung cấp cho bạn git statusđầu ra như:

$ git status
# On branch master
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#    .gitignore
#    a-cache/
#    b-cache/

... nếu các index.htmltập tin chưa được thêm vào kho lưu trữ. (Git thấy rằng có các tệp chưa được đặt trong các thư mục bộ đệm, nhưng nó chỉ báo cáo các thư mục.) Để khắc phục điều này, hãy đảm bảo rằng bạn đã thêm và cam kết các index.htmltệp:

git add *cache/index.html
git commit -m "Adding index.html files to the cache directories"

... Và ý chí của bạn git statussẽ như sau:

$ git status
# On branch master
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#    .gitignore
nothing added to commit but untracked files present (use "git add" to track)

(Rõ ràng là bạn cũng muốn cam kết .gitignore. Tôi chỉ lười biếng với trường hợp thử nghiệm này.)


1
Bạn có thể làm muốn cam kết .gitignore đặc biệt là khi bạn đang có khả năng muốn theo dõi thay đổi nó, và như vậy là nhóm của bạn (nếu bạn đang làm việc với một). Xem stackoverflow.com/a/767213/123033
Dave Everitt

2
@Dave Everitt: Đó chính xác là lý do tại sao tôi nói "Rõ ràng là bạn cũng muốn cam kết .gitignore là tốt".
Mark Longair

6

Trên Windows và Mac, nếu bạn muốn bỏ qua thư mục có tên Flower_Data_Folder trong thư mục hiện tại, bạn có thể thực hiện:

echo Flower_Data_Folder >> .gitignore

Nếu đó là một tệp có tên data.txt:

echo data.txt >> .gitignore

Nếu đó là một đường dẫn như "Dữ liệu / mật khẩu.txt"

echo "Data/passwords.txt" >> .gitignore. 

2

Tôi đã có vấn đề tương tự. Tôi làm việc trên chuỗi công cụ Windows với kho lưu trữ được chia sẻ với các nhân viên Linux và họ vui vẻ tạo các tệp có cùng tên (trừ trường hợp) trong một thư mục nhất định.

Hiệu quả là tôi có thể sao chép kho lưu trữ và ngay lập tức có hàng tá tệp 'được sửa đổi', nếu tôi đăng ký, sẽ tạo ra sự tàn phá.

Tôi có Windows được đặt thành phân biệt chữ hoa chữ thường và Git để không bỏ qua trường hợp này, nhưng nó vẫn thất bại (rõ ràng trong các lệnh gọi API Win32).

Nếu tôi gitignore các tệp thì tôi phải nhớ không theo dõi tệp .gitignore.

Nhưng tôi đã tìm thấy một câu trả lời tốt ở đây:

http://archive.robwilkerson.org/2010/03/02/git-tip-ignore-changes-to-tracked-files/index.html


Liên kết dường như bị hỏng (lần đầu tiên nó chuyển hướng sang phiên bản 'https'): "Không thể kết nối an toàn. Đã xảy ra lỗi trong khi kết nối với kho lưu trữ.robwilkerson.org. PR_END_OF_FILE_ERROR"
Peter Mortensen

0

Chỉ cần tạo .gitignoretệp trong thư mục dự án của bạn Sau đó thêm tên của thư mục trong đó cho ví dụ:

frontend/node_modules
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.