2014-10-16 13 views
5

&hl=vi Autocrlf của tôi bằng true. Trong cygwin-shell của tôi git status cung cấp cho tôi một danh sách chính xác tất cả các thay đổi của tôi.Xử lý các ký tự EOL trong Cygwin Git và Git cho Windows truy cập cùng một kho lưu trữ

Trong Git Bash git status nói rằng tôi đã sửa đổi tất cả các tệp trong dự án. Tôi cũng thấy điều này trong Git GUI và tab Thay đổi trong IntelliJ.

Làm thế nào điều này có thể, và quan trọng hơn, làm thế nào tôi có thể sửa chữa nó?

+3

Git và Windows - không phù hợp với thiên đàng, điều đó chắc chắn! –

+0

Tính năng 'git config --get core.autocrlf' in ra sao? – ryenus

+0

'true' trong mọi trường hợp –

Trả lời

3

Cygwin Git "nhìn thế giới" như thể nó chạy trên nền tảng POSIX — nhờ vào mô phỏng do Cygwin cung cấp. Trái với điều này, Git cho Windows là native Chương trình Windows không sử dụng bất kỳ mô phỏng nào và cố gắng gần với các tiêu chuẩn của Windows (tuy nhiên là ngu ngốc) càng tốt. Điều này dẫn đến là Cygwin Git, LF là ký tự EOL chuẩn, trong khi đối với Git cho Windows, trình tự EOL gốc là CRLF. Vì vậy, cả hai công cụ nhìn thế giới khác nhau, và điều đó giải thích những gì bạn quan sát. Vui lòng đọc this recent thread để biết thêm thông tin (và đặc biệt là this message).

Trong cả hai trường hợp, consider setting core.autocrlf to false anyway để tránh đau đầu bị ràng buộc với "ma thuật" này. Tôi chỉ sử dụng GfW và cuối cùng chuyển cài đặt đó thành false (mặc định là true).

Bạn cũng có thể tìm thấy nhận xét cực kỳ tốt .gitattributes file from the Mono project để thú vị khi nghiên cứu.

+0

Ok, cảm ơn! Một số câu hỏi: (1) Vì vậy, bạn đề nghị đặt autocrlf thành false? (2) Bất kỳ ý tưởng nếu có bằng cách nào đó để có một đại diện GUI của git bằng cách sử dụng Cygwin? Đôi khi tôi phải thực hiện các giai đoạn/cam kết phức tạp khi thêm tất cả các tệp đã sửa đổi không phải là một tùy chọn. –

+0

@ArthurC, xin lỗi vì sự chậm trễ lâu dài. 1) Có, chuyển đổi nó thành false sẽ tắt bất kỳ phép thuật nào liên quan đến các chuỗi EOL sẽ làm cho Gits ở cả hai bên đều có ý tưởng giống như w.r.t. EOL. Sau đó, bạn có thể sử dụng CRLF cho một số tệp (hoặc tất cả) nhất định thông qua '.gitattributes'. Hoặc, nếu có thể, hãy đảm bảo rằng bạn đang sử dụng trình chỉnh sửa văn bản không có vấn đề với LF duy nhất là EOL (Emacs và Vim là hai ví dụ). 2) Tôi tin rằng Cygwin đã xây dựng Tcl/Tk và do đó các công cụ GUI của Git, 'gitk' và' git gui' sẽ có sẵn ở đó. – kostix

+0

@ArthurC, 2), tiếp tục. Lưu ý rằng hoàn toàn có thể thực hiện phân đoạn chi tiết bằng cách sử dụng các công cụ dòng lệnh: 'git add' có thể được sử dụng để hiển thị bất kỳ tệp đã chọn nào và' git add --patch' có thể được sử dụng cho giai đoạn * hunks * đã chọn những thay đổi sẽ được tổ chức nếu bạn sẽ làm unadorned 'git add'. Các thay đổi cũng có thể được chọn lọc hoàn tác thông qua 'git reset --patch' và' git checkout --patch': các thay đổi trước đây sẽ không thay đổi từ chỉ mục trong khi các thay đổi này giống với cây công việc. Không phải là tôi khuyên bạn chống lại bằng cách sử dụng 'git gui' et al, chỉ cho thấy họ không làm gì đặc biệt đồng bằng Git không thể. – kostix

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