2013-08-27 23 views
9

Tôi vô tình theo dõi các tệp cấu hình không gian làm việc trong một repo git. Đang cố khắc phục sự cố, tôi git rm --cached các tệp đó và thêm chúng vào tệp .gitignore.Git checkout delete files trong gitignore

Bây giờ mỗi khi tôi thanh toán chi nhánh từ repo, những người bị xóa. Có cách nào để tránh điều này?

+1

Bạn đã xóa các tệp đó. Và bạn đang phàn nàn cho họ bị xóa? Tôi không theo dõi –

+0

Tôi muốn git bỏ qua chúng, không xóa chúng mỗi khi tôi thay đổi nhánh. – aitkiar

+1

là .gitignore cam kết trên mọi chi nhánh? –

Trả lời

10

Vấn đề là git rm cam kết có mặt trong một số ngành nhưng không phải tất cả, có nghĩa là khi bạn chuyển từ một chi nhánh vẫn chứa các tập tin vào một nơi bạn git rm 'ed git sẽ đúng loại bỏ các tập tin. Những gì bạn thực sự muốn làm là loại bỏ các tập tin từ lịch sử của git như thể họ chưa bao giờ ở đó, theo sau this question. Tuy nhiên, bạn nên lưu ý rằng điều này có nghĩa là viết lại lịch sử kho lưu trữ, vì vậy một điều bạn sẽ phải thực hiện với git push --force sau đó, và một điều khác, bạn sẽ làm khó chịu những người khác cũng làm việc với repo này.

chỉnh sửa có nên viết lại lịch sử không khả thi, hãy chắc chắn bạn cam kết hành động git rm --cached trên mỗi chi nhánh hiện có. Tuy nhiên, bạn sẽ vẫn gặp phải việc xóa lại khó chịu nếu bạn thanh toán các bản sửa đổi trước khi xóa.

Tóm tắt:

  • phạm .gitignore + git rm --cached cho mỗi chi nhánh nếu lịch sử không thể được viết lại, nhưng hãy nhớ rằng kiểm tra ra bất kỳ phiên bản trước đó (ví dụ như thông qua một thẻ) sẽ a) mang lại một lỗi về các tập tin chưa được giải quyết git muốn thanh toán và b) gây xóa một lần nữa các tệp này khi chuyển trở lại HEAD
  • ghi lại lịch sử nếu bạn có khả năng kiểm tra các bản xem trước trước đó (hoặc một số tệp vô tình chứa dữ liệu nhạy cảm) để tránh điều này , nhưng lưu ý rằng điều này sẽ làm hỏng mọi người Bản sao của se

Thực tế, có một khả năng thứ ba: Đối với mỗi nhánh, tạo một nhánh mới mà bạn viết lại lịch sử, trong khi phiên bản gốc thêm một cam kết xóa tất cả các tệp (ngoại trừ các tệp bị bỏ qua!) thêm một tệp có khả năng hiển thị cao giải thích sự lộn xộn và yêu cầu người dùng chuyển sang nhánh đã viết lại từ bây giờ và xóa bản sao cục bộ của họ về người chưa được chia sẻ.


Lý do cho điều này là bạn không muốn xóa phiên bản của người dùng khác của những tập tin này lẽ ra không nên được phiên bản ngay từ đầu, và vì người ta không mong đợi bao giờ chuyển quay lại phiên bản cũ này sẽ không bao giờ cho biết lỗi "tệp đã tồn tại"

+0

Vui lòng làm rõ rằng đây không phải là xóa các tệp khỏi lịch sử, nhưng về việc có '.gitignore' nhất quán trên các nhánh. –

+0

@YuvalAdam Nó _is_ về xóa các tập tin từ lịch sử - họ không bao giờ nên có để bắt đầu, và đặt chúng trong '.gitignore' trên các chi nhánh sẽ không khắc phục vấn đề xóa-on-branch-change (mặc dù 'git rm' +' .gitignore' cam kết trên _each_ branch sẽ, và nên được ưu tiên nếu nhiều người dùng truy cập repo, ngay cả với chi phí của một lịch sử bẩn ...) –

+0

khác nhau .gitignore trong các ngành khác nhau là điều đầu tiên tôi sửa chữa. Nhưng nó không khắc phục được vấn đề. – aitkiar

Các vấn đề liên quan