Làm cách nào tôi có thể xóa các .DS_Store
tệp Mac OS X gây phiền nhiễu đó khỏi kho Git?
Làm cách nào tôi có thể xóa các .DS_Store
tệp Mac OS X gây phiền nhiễu đó khỏi kho Git?
Câu trả lời:
Xóa các tệp hiện có khỏi kho lưu trữ:
find . -name .DS_Store -print0 | xargs -0 git rm -f --ignore-unmatch
Thêm dòng
.DS_Store
vào tệp .gitignore
, có thể được tìm thấy ở cấp cao nhất của kho lưu trữ của bạn (hoặc được tạo nếu chưa có). Bạn có thể làm điều này dễ dàng với lệnh này trong thư mục trên cùng
echo .DS_Store >> .gitignore
Sau đó
git add .gitignore
git commit -m '.DS_Store banished!'
-exec
sẽ khởi chạy git-rm
một lần cho mỗi tệp .DS_Store, trong khi xargs
sẽ đặt tất cả các đường dẫn trên một dòng lệnh. Chủ yếu tôi thích xargs
vì tôi không phải lo lắng về việc thoát khỏi nhiều nhân vật đặc biệt.
.DS_Store
để .gitignore
làm việc đệ quy? Đó là, nó sẽ bỏ qua some/level/of/folders/.DS_Store
là tốt?
Kết hợp các câu trả lời của benzado và webmat, cập nhật với git rm
, không thất bại trên các tệp được tìm thấy không có trong repo và làm cho nó có thể dán chung cho bất kỳ người dùng nào:
# remove any existing files from the repo, skipping over ones not in repo
find . -name .DS_Store -print0 | xargs -0 git rm --ignore-unmatch
# specify a global exclusion list
git config --global core.excludesfile ~/.gitignore
# adding .DS_Store to that list
echo .DS_Store >> ~/.gitignore
~/.gitignore
tập tin loại trừ toàn cầu của tôi là một nỗi đau. Có những tệp mà tôi muốn loại trừ khỏi thư mục nhà của tôi mà tôi không muốn bỏ qua trên toàn cầu. Tôi sử dụng ~/.gitexcludes
thay vì thông qua cùng một chỉ thị:core.excludesfile
Giải pháp tốt nhất để giải quyết vấn đề này là Globally bỏ qua các tệp này khỏi tất cả các repos git trên hệ thống của bạn. Điều này có thể được thực hiện bằng cách tạo một tệp gitignore toàn cầu như:
vi ~/.gitignore_global
Thêm quy tắc để bỏ qua các tệp như:
# Compiled source #
###################
*.com
*.class
*.dll
*.exe
*.o
*.so
# Packages #
############
# it's better to unpack these files and commit the raw source
# git has its own built in compression methods
*.7z
*.dmg
*.gz
*.iso
*.jar
*.rar
*.tar
*.zip
# Logs and databases #
######################
*.log
*.sql
*.sqlite
# OS generated files #
######################
.DS_Store
.DS_Store?
._*
.Spotlight-V100
.Trashes
ehthumbs.db
Thumbs.db
Bây giờ, thêm tệp này vào cấu hình git toàn cầu của bạn:
git config --global core.excludesfile ~/.gitignore_global
Biên tập:
Các biểu tượng đã bị xóa vì chúng có thể cần phải được cam kết là tài sản ứng dụng.
Trong một số tình huống, bạn cũng có thể muốn bỏ qua một số tệp trên toàn cầu. Đối với tôi, .DS_Store là một trong số đó. Đây là cách thực hiện:
git config --global core.excludesfile /Users/mat/.gitignore
(Hoặc bất kỳ tập tin nào bạn chọn)
Sau đó chỉnh sửa tệp giống như .gitignore của repo. Lưu ý rằng tôi nghĩ bạn phải sử dụng một đường dẫn tuyệt đối.
Nếu bạn không thể xóa các tệp vì chúng có các thay đổi được sử dụng theo giai đoạn:
git rm --cached -f *.DS_Store
Mở terminal và gõ "cd <ProjectPath>"
Xóa các tệp hiện có:
find . -name .DS_Store -print0 | xargs -0 git rm -f --ignore-unmatch
nano .gitignore
Thêm điều này .DS_Store
gõ "ctrl + x"
Nhập "y"
Nhập để lưu tệp
git add .gitignore
git commit -m '.DS_Store removed.'
nano .gitignore
tạo tập tin nếu không có, lệnh này sẽ được thực thi từ thư mục gốc của dự án
Câu trả lời được bình chọn hàng đầu là tuyệt vời, nhưng giúp đỡ những tân binh như tôi, đây là cách tạo tệp .gitignore, chỉnh sửa, lưu nó, xóa các tệp bạn có thể đã thêm vào git, sau đó đẩy tệp lên Github.
Tạo tệp .gitignore
Để tạo tệp .gitignore, bạn chỉ có thể touch
tạo tệp tạo tệp trống có tên được chỉ định. Chúng tôi muốn tạo tệp có tên .gitignore để có thể sử dụng lệnh:
touch .gitignore
Bỏ qua các tập tin
Bây giờ bạn phải thêm dòng thông báo cho git bỏ qua các tệp DS Store vào .gitignore của bạn. Bạn có thể sử dụng trình soạn thảo nano để làm điều này.
nano .gitignore
Nano rất hay vì nó bao gồm các hướng dẫn về cách thoát khỏi nó. ( Ctrl- Ođể lưu, Ctrl- Xđể thoát)
Sao chép và dán một số ý tưởng từ ý chính Github này liệt kê một số tệp phổ biến cần bỏ qua. Những câu hỏi quan trọng nhất, để trả lời câu hỏi này, sẽ là:
# OS generated files #
######################
.DS_Store
.DS_Store?
# Là các bình luận và sẽ giúp bạn sắp xếp tệp của mình khi nó phát triển.
Bài viết này của Github cũng có một số ý tưởng và hướng dẫn chung.
Xóa các tệp đã được thêm vào git
Cuối cùng, bạn cần thực sự xóa các tệp DS Store khỏi thư mục của mình.
Sử dụng lệnh tuyệt vời này từ câu trả lời bỏ phiếu hàng đầu. Điều này sẽ đi qua tất cả các thư mục trong thư mục của bạn và xóa các tệp đó khỏi git.
find . -name .DS_Store -print0 | xargs -0 git rm -f --ignore-unmatch
Đẩy .gitignore lên đến Github
Bước cuối cùng, bạn cần thực sự cam kết tệp .gitignore của mình.
git status
git add .gitignore
git commit -m '.DS_Store banished!'
Tôi đã phải thay đổi git-rm thành git rm ở trên để làm cho nó hoạt động:
find . -depth -name '.DS_Store' -exec git rm --cached '{}' \; -print
xóa chúng bằng cách sử dụng git-rm
và sau đó thêm .DS_Store .gitignore
để ngăn chúng được thêm lại. Bạn cũng có thể sử dụng blueharvest để ngăn chặn chúng được tạo ra cùng nhau
Trong trường hợp bạn muốn xóa các tệp DS_Store vào mọi thư mục và thư mục con:
find . -name .DS_Store -print0 | xargs -0 git rm --ignore-unmatch
Bỏ qua chúng bằng cách:
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
Sau đây làm việc tốt nhất cho tôi. Xử lý các tệp chưa từng có và các tệp có sửa đổi cục bộ. Để tham khảo, đây là trên hệ thống Mac 10.7 chạy git 1.7.4.4.
Tìm và xóa:
find . -name .DS_Store -print0 | xargs -0 git rm --ignore-unmatch -f
Tôi cũng bỏ qua toàn cầu .DS_Store trên tất cả các kho lưu trữ bằng cách đặt core.excludesfile toàn cầu.
Đầu tiên, tạo tệp (nếu không tồn tại):
touch ~/.gitignore
Sau đó thêm dòng sau và lưu lại:
.DS_Store
Bây giờ cấu hình git để tôn trọng tệp trên toàn cầu:
git config --global core.excludesfile ~/.gitignore
Tôi thấy rằng dòng sau từ snipplr thực hiện tốt nhất việc xóa tất cả .DS_Store
, bao gồm cả dòng có sửa đổi cục bộ.
find . -depth -name '.DS_Store' -exec git-rm --cached '{}' \; -print
--cached
tùy chọn, giữ địa phương của bạn .DS_Store
vì nó sẽ được sao chép bằng mọi cách.
Và giống như đã đề cập ở trên, hãy thêm .DS_Store
vào tệp .gitignore trên thư mục gốc của dự án của bạn. Sau đó, nó sẽ không còn trong tầm nhìn của bạn (của repos).
Tôi đến bữa tiệc muộn một chút, nhưng tôi có một câu trả lời hay. Để xóa các tệp .DS_Store, hãy sử dụng các lệnh sau từ cửa sổ đầu cuối, nhưng hãy cẩn thận xóa các tệp bằng 'find'. Sử dụng tên cụ thể với tùy chọn -name là một trong những cách an toàn hơn để sử dụng tên đó:
cd directory/above/affected/workareas
find . -name .DS_Store -delete
Bạn có thể bỏ "-delete" nếu bạn muốn liệt kê chúng trước và sau. Điều đó sẽ trấn an bạn rằng họ đã biến mất.
Liên quan đến lời khuyên ~ / .gitignore_global: hãy cẩn thận ở đây. Bạn muốn đặt tệp đẹp đó vào .gitignore trong cấp độ cao nhất của mỗi workarea và cam kết nó, để bất kỳ ai nhân bản repo của bạn sẽ đạt được lợi ích của việc sử dụng nó.
Điều này sẽ làm việc:
find . -name "*.DS_Store" -type f -exec git-rm {} \;
Nó xóa tất cả các tập tin có tên kết thúc .DS_Store
, bao gồm ._.DS_Store
.
"*.DS_Store"
, để dấu hoa thị được chuyển đến find
chứ không phải mở rộng bằng vỏ.
Vì một số lý do, không có cái nào ở trên hoạt động trên máy mac của tôi.
Giải pháp của tôi là từ thiết bị đầu cuối chạy:
rm .DS_Store
Sau đó chạy lệnh sau:
git pull origin master
Điều này làm việc cho tôi, kết hợp hai câu trả lời từ trên:
Có một vài giải pháp để giải quyết vấn đề này. Để tránh tạo tệp .DS_Store, không sử dụng Trình tìm OS X để xem các thư mục. Một cách khác để xem các thư mục là sử dụng dòng lệnh UNIX. Để xóa các tệp .DS_Store, có thể sử dụng sản phẩm của bên thứ ba có tên DS_Store Terminator. Để xóa các tệp .DS_Store khỏi toàn bộ hệ thống, có thể sử dụng lệnh shell UNIX. Khởi chạy Terminal từ Ứng dụng: Tiện ích Tại dấu nhắc shell UNIX, hãy nhập lệnh UNIX sau: sudo find / -name ".DS_Store" -depth -exec rm {} \; Khi được nhắc nhập mật khẩu, hãy nhập mật khẩu Quản trị viên Mac OS X.
Lệnh này là để tìm và loại bỏ tất cả các lần xuất hiện của .DS_Store bắt đầu từ gốc (/) của hệ thống tệp thông qua toàn bộ máy. Để cấu hình lệnh này để chạy như một tác vụ theo lịch trình, hãy làm theo các bước dưới đây: Khởi chạy Terminal từ Ứng dụng: Tiện ích Tại dấu nhắc shell UNIX, hãy nhập lệnh UNIX sau:
sudo crontab -e Khi được nhắc nhập mật khẩu, hãy nhập mật khẩu Quản trị viên Mac OS X. Khi ở trong trình soạn thảo vi, nhấn chữ I trên bàn phím của bạn một lần và nhập thông tin sau:
15 1 * * * root find / -name ".DS_Store" -depth -exec rm {} \;
Đây được gọi là mục crontab, có định dạng sau:
Phút giờ DayOfMonth Tháng DayOfWeek Lệnh người dùng.
Mục crontab có nghĩa là lệnh sẽ được hệ thống tự động thực thi vào lúc 1:15 sáng hàng ngày bởi tài khoản được gọi là root.
Lệnh bắt đầu từ tìm tất cả các cách để. Nếu hệ thống không chạy, lệnh này sẽ không được thực thi.
Để lưu mục nhập, nhấn phím Esc một lần, sau đó nhấn đồng thời Shift + z + z.
Lưu ý: Thông tin trong Bước 4 chỉ dành cho trình soạn thảo vi.
thêm phần này vào tập tin của bạn .gitignore
#Ignore folder mac
.DS_Store
lưu cái này và thực hiện cam kết
git add -A
git commit -m "ignore .DS_Store"
và bây giờ bạn bỏ qua điều này cho tất cả các cam kết của bạn
Cách tốt nhất để thoát khỏi tập tin này mãi mãi và không bao giờ phải lo lắng về nó nữa là
tạo một tệp .gitignore toàn cầu:
tiếng vang .DS_Store >> ~ / .gitignore_global
Và cho git biết rằng bạn muốn sử dụng tệp này cho tất cả các kho lưu trữ của bạn:
git config --global core.excludesfile ~ / .gitignore_global Và đó là nó! .DS_Store không theo cách của bạn.
Không cần phải loại bỏ .DS_STORE
cục bộ
Chỉ cần thêm nó vào .gitignore
tập tin
Tệp .gitignore chỉ là một tệp văn bản cho Git biết các tệp hoặc thư mục nào sẽ bỏ qua trong một dự án.
Các lệnh
nano .gitignore
.DS_Store
rồi bấmCTRL+X > y > Hit Return
git status
Để có cái nhìn cuối cùng về những thay đổi của bạngit add .gitignore
git commit -m 'YOUR COMMIT MESSAGE'
git push origin master