Làm cách nào để buộc git kiểm tra nhánh chính và xóa ký tự xuống dòng sau khi tôi chuẩn hóa tệp bằng thuộc tính "text"?


101

Được rồi, vì vậy tôi đã thêm tệp .gitattributesvới các dòng như thế này

*.css text
*.js text
etc...

Sau đó, tôi đã làm theo hướng dẫn tại http://git-scm.com/docs/gitattributes#_checking-out_and_checking-in

$ rm .git/index     # Remove the index to force Git to
$ git reset         # re-scan the working directory
$ git status        # Show files that will be normalized
$ git add -u
$ git add .gitattributes
$ git commit -m "Introduce end-of-line normalization"

Nhưng bây giờ bản sao làm việc của tôi vẫn có dấu xuống dòng! Tôi có các tệp chưa được kiểm tra mà tôi muốn giữ lại. Làm cách nào để kiểm tra git lại nhánh chính với các tệp đã chuẩn hóa?

Tôi biết các tệp được chuẩn hóa trong kho lưu trữ vì khi tôi sao chép kho, tôi có tất cả các tệp mà không có dấu xuống dòng.

Câu trả lời:


264

Ah ah! Kiểm tra cam kết trước đó, sau đó kiểm tra tổng thể.

git checkout HEAD^
git checkout -f master

5
Cảm ơn vì giải pháp này, nhưng vấn đề rõ ràng trong git là "checkout -f" không thực sự buộc phải kiểm tra lại. Một cách giải quyết khác trước tiên là xóa tất cả các tệp sao chép đang hoạt động (tức là mọi thứ trừ .git dir).
pfalcon

À, vâng, cảm ơn vì điều đó! Nghe thấy vậy, tôi đoán chúng ta có thể xóa các tệp quan tâm và chạy thanh toán. Đối với tôi, thực sự chỉ có một tập tin tôi đang cố sửa. Nhưng tất nhiên nó có thể là tất cả các tệp, hàng trăm hoặc hàng nghìn.
Jason

Việc này không thành công trên git 1.8.3 (mac) với: error: pathspec 'HEAD ^' không khớp với bất kỳ tệp nào được biết đến với git.
dval

@dval, hãy xem các chỉnh sửa cho bài đăng này và bạn sẽ thấy một cách khác để thực hiện việc này. Tôi cũng đang chạy trên máy Mac và điều này phù hợp với tôi. Tôi cũng khuyến khích bạn nâng cấp git của mình lên 2+ và bạn có thể sử dụng Homebrew để thực hiện việc này theo cách có thể bảo trì an toàn.
Jason

2
Điều này không thực sự hiệu quả. GIT sẽ chỉ cập nhật các tệp đã thay đổi giữa hai lần cam kết (với một số ngoại lệ). Nếu một kho lưu trữ là thương hiệu mới, ví dụ: chỉ có hai cam kết và lần đầu tiên xảy ra để trống, sau đó giải pháp này sẽ hoạt động. Nếu không, bạn cần phải xóa tất cả các tệp như được mô tả trong câu trả lời của mechsin.
jstine

16

Như những người khác đã chỉ ra, người ta có thể chỉ cần xóa tất cả các tệp trong repo và sau đó kiểm tra chúng. Tôi thích phương pháp này hơn và nó có thể được thực hiện với mã bên dưới

git ls-files -z | xargs -0 rm
git checkout -- .

hoặc một dòng

git ls-files -z | xargs -0 rm ; git checkout -- .

Tôi sử dụng nó mọi lúc và chưa tìm thấy bất kỳ mặt nào xuống!

Đối với một số giải thích thêm, những -zgắn thêm một ký tự null vào cuối mỗi đầu ra nhập bằng ls-files, và -0nói xargsđể phân định các đầu ra nó đã nhận được bởi những ký tự null.

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.