.gitignore tất cả các tệp .DS_Store trong mọi thư mục và thư mục con


560

Tôi đã thêm .DS_Store vào tệp .gitignore, nhưng có vẻ như nó chỉ bỏ qua .DS_Store trong thư mục gốc, không có trong mọi thư mục và thư mục con.

Làm thế nào để tôi sửa lỗi này?



Làm thế nào chính xác bạn đã thêm nó vào .gitignore? Nó sẽ hoạt động trong tất cả các thư mục (làm cho tôi).
Thilo

Nó làm việc cho tôi là tốt. Tôi cũng đã thử khi nó ở cuối tệp, nếu bạn phải có một dòng mới (cụ thể về nền tảng) nhưng điều đó không thay đổi các thư mục .DS_Store trong bất kỳ phần nào của hệ thống phân cấp vẫn bị bỏ qua.
enorl76

Câu hỏi mà tôi hiểu là: Làm thế nào để dễ dàng bỏ qua tất cả các lần xuất hiện của .DS_Store trong tất cả các thư mục con mà không thực hiện thủ công trong mọi thư mục con. Tôi đã từng gặp vấn đề tương tự. Câu trả lời dưới đây cho thấy cách giải quyết nó (2 đoạn cuối).
petrsyn

Câu trả lời:


647

Tôi nghĩ vấn đề bạn gặp phải là trong một số cam kết trước đó, bạn đã vô tình thêm .DS_Storecác tệp vào kho lưu trữ. Tất nhiên, một khi một tệp được theo dõi trong kho lưu trữ của bạn, nó sẽ tiếp tục được theo dõi ngay cả khi nó khớp với một mục trong tệp .gitignore có thể áp dụng.

Bạn phải xóa thủ công các .DS_Storetệp đã được thêm vào kho lưu trữ của bạn. Bạn có thể dùng

git rm --cached .DS_Store

Sau khi loại bỏ, git nên bỏ qua nó. Bạn chỉ cần dòng sau trong .gitignoretập tin gốc của bạn : .DS_Store. Đừng quên giai đoạn!

git rm --cached .DS_Store

chỉ xóa .DS_Storekhỏi thư mục hiện tại. Bạn có thể dùng

find . -name .DS_Store -print0 | xargs -0 git rm --ignore-unmatch

để loại bỏ tất cả .DS_Storeskhỏi kho lưu trữ.

Mẹo cảm thấy: Vì có thể bạn không bao giờ muốn bao gồm .DS_Storecác tệp, hãy tạo một quy tắc toàn cầu. Đầu tiên, tạo một .gitignoretệp toàn cầu ở đâu đó, vd

echo .DS_Store >> ~/.gitignore_global

Bây giờ hãy nói với git để sử dụng nó cho tất cả các kho:

git config --global core.excludesfile ~/.gitignore_global

Trang này đã giúp tôi trả lời câu hỏi của bạn.


41
2 đoạn cuối trả lời câu hỏi này. Cảm ơn.
petrsyn

70
Cẩn trọng dữ liệu rm --cached .DS_Store hung chỉ xóa một .DS_Store khỏi thư mục hiện tại. Sử dụng ắc tinfind. -name .DS_Store -print0 | xargs -0 git rm --ignore-unmatch Tập tính để xóa tất cả .DS_Stores khỏi repo
auco

4
Một danh sách các tệp phổ biến khác cần bỏ qua có thể có ích
geotheory 17/03/2015

14
Ý tưởng tồi khi sử dụng quy tắc toàn cầu IMO: Cố gắng duy trì cấu hình toàn cầu trên nhiều người dùng / máy không bao giờ hoạt động - bạn muốn các quy tắc chi phối repo của mình trong chính repo. Đồng ý với điều này
Yarin

15
Tôi không đồng ý với bạn. (Mặc dù tôi đã nâng cao nhận xét của bạn vì tôi nghĩ nó sâu sắc.) Nếu chúng tôi làm toàn cầu, thì mọi người dùng mac đều cần làm điều đó, nhưng chỉ một lần. Nếu chúng ta làm kho lưu trữ rộng, thì chúng ta cần làm điều đó cho mọi kho lưu trữ. Tôi không biết về bạn, nhưng tôi luôn tạo ra những bản repos mới. Bằng cách thực hiện nó trên toàn cầu, người ta giải quyết vấn đề một lần và mãi mãi.
Edward Newell

356

Thêm **/.DS_Storevào .gitignorecho thư mục con


Nếu .DS_Stoređã cam kết:

find . -name .DS_Store -print0 | xargs -0 git rm --ignore-unmatch

Để bỏ qua chúng trong tất cả các kho lưu trữ: (đôi khi nó được đặt tên ._.DS_Store)

echo ".DS_Store" >> ~/.gitignore_global
echo "._.DS_Store" >> ~/.gitignore_global
echo "**/.DS_Store" >> ~/.gitignore_global
echo "**/._.DS_Store" >> ~/.gitignore_global
git config --global core.excludesfile ~/.gitignore_global

vẫn tải lên repo của tôi?
Freddy Sidauruk

@FreddySidauruk sử dụng git rm --cached your_fileđầu tiên
ronald8192

@FreddySidauruk Nên find . -name .DS_Store -print0 | xargs -0 git rm --ignore-unmatch, từ: stackoverflow.com/questions/18393498/ Lời
ronald8192

1
Có vẻ như việc thêm -flà cần thiết nếu bạn có các tệp đang mở trong các thư mục liên quan:find . -name .DS_Store -print0 | xargs -0 git rm -f --ignore-unmatch
Mehmet Kaplan

158

Nếu .DS_Store chưa bao giờ được thêm vào kho git của bạn, chỉ cần thêm nó vào tệp .gitignore của bạn.

Nếu bạn không có, hãy tạo một tệp có tên

.gitignore

Trong thư mục gốc của ứng dụng của bạn và chỉ cần viết

**/.DS_Store

Trong đó. Điều này sẽ không bao giờ cho phép tệp .DS_Store lẻn vào git của bạn.

Nhưng, nếu nó đã ở đó, hãy viết trong thiết bị đầu cuối của bạn:

find . -name .DS_Store -print0 | xargs -0 git rm -f --ignore-unmatch

sau đó cam kết và đẩy các thay đổi để xóa .DS_Store khỏi repo từ xa của bạn:

git commit -m "Remove .DS_Store from everywhere"

git push origin master

Và bây giờ hãy thêm .DS_Store vào tệp .gitignore của bạn, rồi lại cam kết và đẩy với 2 đoạn mã cuối cùng (git commit ..., git đẩy ...)


3
Tại sao đôi dấu sao? Điều đó nghĩa là gì?
MilanG

1
@MilanG đó là một từ khóa có nghĩa là 'tìm kiếm trong thư mục này và tất cả các thư mục con'.
lachie_h

1
Không chắc chắn đó là một lời giải thích hoàn hảo về những gì dấu hoa thị kép đại diện cho. Nó là một ký tự đại diện. Có thể *hoặc **tùy thuộc vào những gì bạn muốn đạt được. Đó là một cách để nói với shell cách điều hướng các thư mục. Câu trả lời stackoverflow này giải thích nó đầy đủ stackoverflow.com/a/28199633/4092170
El'Magnifico

** sẽ không bao giờ khớp với các thư mục bị ẩn (./): faclessuser.github.io/wcmatch/glob
Jonathan

điều này thực sự hoạt động ... nên được đánh dấu là đã trả lời
ichimaru

85

Tệp .gitignore của bạn sẽ trông như thế này:

# Ignore Mac DS_Store files
.DS_Store

Miễn là bạn không bao gồm dấu gạch chéo, nó được khớp với tên tệp trong tất cả các thư mục. (từ đây )


nó vẫn được nâng cấp thành repo
Freddy Sidauruk

@FreddySidauruk thì bạn phải chạygit rm --cached path/to/file/here
Sgnl

23

Bước 1, xóa tất cả các *.DS_storetập tin. Một người có thể chạy

git rm -f *.DS_Store

nhưng lưu ý rằng rm -fcó thể hơi nguy hiểm nếu bạn mắc lỗi đánh máy! Bước hai: thêm

*.DS_Store
.DS_Store

đến .gitignore. Điều này làm việc cho tôi!


13

Thêm vào *.DS_Storetập tin .gitignore của bạn. Điều đó làm việc cho tôi hoàn hảo


11

Bạn cũng có thể thêm --cachedcờ vào câu trả lời của auco để duy trì các tệp .DS_store cục bộ, như Edward Newell đã đề cập trong câu trả lời ban đầu của anh ấy. Lệnh sửa đổi trông như thế này: find . -name .DS_Store -print0 | xargs -0 git rm --cached --ignore-unmatch..chủ và cảm ơn!


5

Bước: 1) Xóa các tệp hiện có bằng lệnh này

tìm thấy . -name .DS_Store -print0 | xargs -0 git rm -f --ignore-unmatch

Bước: 2) Thêm .DS_Store vào tệp .gitignore của bạn

Bước: 3) Cam kết thay đổi của bạn trong .gitignore git add .gitignore git commit -m "đã xóa .DS_Store"


3
  1. $ git rm ./*.DS_Store - xóa tất cả .DS_Store khỏi git
  2. $ echo \.DS_Store >> .gitignore - bỏ qua .DS_Store trong tương lai

cam kết và thúc đẩ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.