Tôi đã tạo bản repo của mình với autocrlf=true
và sau đó thực hiện một số lần thanh toán và cam kết với autocrlf=false
. Sau đó chuyển về autocrlf=true
(OS Win). Mọi thứ có vẻ ổn, cho đến khi tôi bắt đầu một số kết hợp giữa các nhánh. Nhiều xung đột hợp nhất xuất hiện, trong đó toàn bộ tệp được đánh dấu là đã thay đổi do thay đổi eols
(Tôi cho rằng đó là các tệp đó, đã được kiểm tra và cam kết với autocrlf=false
).Cách sửa CRLF trong kho GIT để tránh xung đột hợp nhất
Có một số lịch sử có giá trị đối với tôi, vì vậy tôi muốn thực hiện một số chuyển đổi hoặc sửa đổi cam kết với chuyển đổi eols
thay vì tạo repo mới và bắt đầu cuộc sống mới.
Đây là cách tôi hiểu autocrlf
(OS Win):
trường hợp nếu autocrlf=true
WorkingTree -> commit -> GITRepository
CRLF CRLF to LF LF
LF no conv. LF
WorkingTree <- checkout <- GITRepository
CRLF LF to CRLF LF
trường hợp nếu autocrlf=false
WorkingTree -> commit -> GITRepository
CRLF no conv. CRLF
LF no conv. LF
WorkingTree <- checkout <- GITRepository
CRLF no conv. CRLF
LF no conv. LF
Bây giờ tôi muốn sử dụng GIT với autocrlf=false
, vì vậy Tôi quyết định thanh toán từng chi nhánh, sửa chữa eols
của các tệp nguồn với tiện ích EOL converter và com mit trở lại với CRLF. Tôi đã làm nó, nhưng sau thời gian, vẫn còn một số tập tin, mà có lẽ không được kiểm tra sau khi tôi thay đổi thiết lập của autocrlf
đến false
(hoặc những tập tin này đến để hợp nhất từ cam kết không cố định cũ hơn? Trong quá trình chuyển đổi tôi sử dụng mặt nạ * .filetype để tự động xử lý tất cả LF sang CRLF để không có giải thích nào khác cho tình huống như vậy đối với tôi). Tôi cũng đã cố gắng để touch
các tệp, để cam kết lại tất cả (như tôi đã thấy một nơi nào đó ở đây trong stackoverflow) nhưng thay đổi ngày không có liên quan cho GIT AFAIK. Tôi cũng đã đọc How to undo the damage of autocrlf, nhưng không chắc đó là trường hợp của tôi và cũng không hiểu thủ thuật của thuật sĩ.
Làm cách nào để thoát khỏi mớ hỗn độn này?
bạn đã thử 'autocrlf = input' chưa? nếu repo của bạn không được công bố công khai, bạn có thể sử dụng nó và 'filter-branch --index-filter' để xóa các kết thúc dòng trong lịch sử của bạn – knittl
@knittl: Nếu tôi hiểu, điều này sẽ viết lại tất cả các commit trong lịch sử với LF. Tôi có đúng không? Sau đó, tôi có lẽ sẽ phải bật 'autocrlf = true' để nhận' CRLF' sau khi thanh toán (OS Win). Có một tùy chọn để chuyển đổi repo trực tiếp sang 'CRLF' và để lại' autocrlf = false' sau đó không? – Andik
khi kho lưu trữ được chuyển thành CRLF, bạn sẽ có thể có 'autocrlf = false', do đó không có kết thúc dòng nào được chuyển đổi và giữ nguyên cách trong tệp – knittl