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?
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?
Câu trả lời:
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_Store
cá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_Store
tệ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 .gitignore
tậ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_Store
khỏ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_Stores
khỏ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_Store
các tệp, hãy tạo một quy tắc toàn cầu. Đầu tiên, tạo một .gitignore
tệ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.
Thêm **/.DS_Store
vào .gitignore
cho 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
git rm --cached your_file
đầu tiên
find . -name .DS_Store -print0 | xargs -0 git rm --ignore-unmatch
, từ: stackoverflow.com/questions/18393498/ Lời
-f
là 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
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 ...)
*
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
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 )
git rm --cached path/to/file/here
Bạn cũng có thể thêm --cached
cờ 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!
$ git rm ./*.DS_Store
- xóa tất cả .DS_Store khỏi git$ echo \.DS_Store >> .gitignore
- bỏ qua .DS_Store trong tương laicam kết và thúc đẩy