Có thể "làm mới" kho lưu trữ git sau khi cập nhật tệp gitignore không?
Tôi vừa thêm nhiều sự thiếu hiểu biết (?) Cho gitignore của tôi và muốn xóa nội dung đã có trong repo khớp với tệp mới.
Có thể "làm mới" kho lưu trữ git sau khi cập nhật tệp gitignore không?
Tôi vừa thêm nhiều sự thiếu hiểu biết (?) Cho gitignore của tôi và muốn xóa nội dung đã có trong repo khớp với tệp mới.
Câu trả lời:
Giải pháp được đề cập trong " tập tin .gitignore không bỏ qua " là một chút cực đoan, nhưng nên hoạt động:
# rm all files
git rm -r --cached .
# add all files as per new .gitignore
git add .
# now, commit for new .gitignore to apply
git commit -m ".gitignore is now working"
( Đảm bảo cam kết đầu tiên thay đổi của bạn, bạn muốn giữ lại , để tránh sự cố bất kỳ như jball037 ý kiến dưới đây .
Các --cached
tùy chọn sẽ giữ các tập tin của bạn bị ảnh hưởng trên đĩa của bạn mặc dù.)
Bạn cũng có một giải pháp chi tiết hơn trong bài đăng trên blog " Làm cho Git bỏ qua các tệp đã được theo dõi ":
git rm --cached `git ls-files -i --exclude-standard`
Bassim gợi ý trong bản chỉnh sửa của mình :
Trong trường hợp bạn nhận được thông báo lỗi như thế
fatal: path spec '...' did not match any files
, có thể có các tệp có khoảng trắng trong đường dẫn của chúng.Bạn có thể xóa tất cả các tệp khác với tùy chọn
--ignore-unmatch
:
git rm --cached --ignore-unmatch `git ls-files -i --exclude-standard`
nhưng các tệp chưa từng có sẽ vẫn còn trong kho lưu trữ của bạn và sẽ phải được xóa một cách rõ ràng bằng cách đặt đường dẫn của chúng bằng dấu ngoặc kép:
git rm --cached "<path.to.remaining.file>"
Tôi có thể hiểu nhầm, nhưng bạn đang cố xóa các tệp mới bị bỏ qua hoặc bạn muốn bỏ qua các sửa đổi mới cho các tệp này? Trong trường hợp này, điều đang làm việc.
Nếu bạn muốn xóa các tập tin bị bỏ qua đã cam kết trước đó, sau đó sử dụng
git rm –cached `git ls-files -i –exclude-standard`
git commit -m 'clean up'
git ls-files -i –exclude-standard
git commit -m 'dọn dẹp' '
Tôi biết đây là một câu hỏi cũ, nhưng giải pháp của gracchus không hoạt động nếu tên tệp chứa khoảng trắng. Giải pháp của VonC đối với tên tệp có dấu cách là không xóa chúng bằng cách sử dụng --ignore-unmatch
, sau đó xóa chúng theo cách thủ công, nhưng điều này sẽ không hoạt động tốt nếu có nhiều.
Đây là một giải pháp sử dụng các mảng bash để chụp tất cả các tệp.
# Build bash array of the file names
while read -r file; do
rmlist+=( "$file" )
done < <(git ls-files -i --exclude-standard)
git rm –-cached "${rmlist[@]}"
git commit -m 'ignore update'