2011-05-02 22 views
43

Tôi đã đọc ở một số nơi có vấn đề với git (hoặc chỉ msysgit?) Và mã hóa ký tự - I tin nó chỉ là vấn đề trong tên tệp .git, msysgit, dấu trọng âm, utf-8, các câu trả lời cuối cùng

Những gì tôi muốn là một số thông tin 'dứt khoát' (hoặc ít nhất có thẩm quyền) về:

  1. Chính xác những gì là 'vấn đề'? (Các triệu chứng)
  2. Nguyên nhân là gì? (Ngắn gọn)
  3. Trong trường hợp nào đây là nút trình chiếu?
  4. Có bất kỳ giải pháp nào trong tầm nhìn hoặc không thực hiện bất kỳ giải pháp nào không?

Tôi hy vọng câu hỏi này không phải là quá mơ hồ, tôi nghĩ rằng nó sẽ là tốt để có tất cả các thông tin này ở một nơi để có thể chỉ mọi người nó ...

+3

UTF-8 đang chuyển sang msysgit. Xem câu trả lời cập nhật của tôi. – VonC

Trả lời

39

Cập nhật tháng 2 năm 2017 (Git 2.12): Bảng chiều rộng ký tự đã được cập nhật để khớp với Unicode 9.0.
update_unicode.shmoved it into contrib/update-unicode: xem its README.

Cập nhật tháng 8 năm 2014 (git 2.1): commit a67c821 (Torsten Bögershausen (tboegi)) thêm hỗ trợ cho Unicode 7.0.

Cập nhật tháng 4 năm 2014: commit d813ab9 (Torsten Bögershausen (tboegi)) thêm hỗ trợ cho Unicode 6.3
(git 1.9.2):

Unicode 6.3 định nghĩa nhiều điểm mã như cách kết hợp hoặc dấu. Ví dụ:
Ví dụ: ký tự "ö" có thể được biểu thị dưới dạng "o" theo sau là U+0308 COMBINING DIARESIS (aka umlaut, double-dot-above).
Chúng ta nên xem xét rằng một chuỗi hai điểm mã như vậy chiếm một cột hiển thị cho các mục đích căn chỉnh, và cho rằng, git_wcwidth() sẽ trả về 0 cho chúng.

codepoints bị ảnh hưởng bao gồm:

U+0358..U+035C 
U+0487 
U+05A2, U+05BA, U+05C5, U+05C7 
U+0604, U+0616..U+061A, U+0659..U+065F 

Đầu tiêu chuẩn unicode đã định nghĩa này như là "dành riêng".

Chỉ phạm vi 0..U+07FF đã được kiểm tra để xem điểm mã nào cần được đánh dấu là 0-chiều rộng trong khi chuẩn bị cho cam kết này; có thể cần cập nhật thêm.


Cập nhật tháng 4 năm 2012: Hỗ trợ Unicode được phát hành trong phiên bản 1.7.10. Xem this page để biết ghi chú và cài đặt bạn nên đặt.

Cụ thể:

git config [--global] core.quotepath off 
git config [--global] i18n.logoutputencoding utf8 
git config [--global] i18n.commitencoding utf8 
git config [--global] --unset svn.pathnameencoding 

Lệnh recodetree check quét toàn bộ lịch sử của một kho git và in tất cả các tên tập tin ASCII.Nếu đầu ra trống, không cần di chuyển.


Cập nhật tháng 2 năm 2012: bản vá lỗi cho UTF 8 hỗ trợ được đến ở chi nhánh 'devel' của msysgit repo on GitHub, bao gồm Update less settings for UTF-8.

Các Git cho trang của Windows đề cập của Google+:

Karsten Blees' UTF-8 bản vá lỗi cho Git cho Windows hiện đã được sáp nhập vào 'devel'.
Điều này có nghĩa là bản phát hành sắp tới sẽ hỗ trợ tên tệp Unicode!


tháng năm 2011

Tôi tin rằng msysgit issue 80 có tin mới nhất về lỗi đó.
Cũng được mô tả trong issue 376.

Ví dụ:

Đây là những gì sẽ xảy ra:

  1. git trên Windows hoạt động trên tên file và đối xử với họ về cơ bản như suối byte. Trong trường hợp của bạn, các luồng xảy ra là văn bản được mã hóa UTF8.

  2. git trên Windows yêu cầu thời gian chạy để tạo tệp và chuyển luồng đó vào luồng byte.

  3. Vì nội bộ trên Windows mọi thứ là Unicode, thời gian chạy chuyển đổi luồng luồng thành UTF16 bằng cách sử dụng ngôn ngữ hiện được đặt (còn gọi là "mã").
    Tức là, nó giải thích hiệu quả luồng byte dưới dạng văn bản được mã hóa CP949 (tiếng Hàn).
    Rõ ràng, một số chuỗi byte UTF8 là chuỗi CP949 không hợp lệ và chuyển đổi không thành công ("Đối số không hợp lệ"); hoặc nếu chuỗi UTF8 xảy ra là các chuỗi CP949 chính xác, kết quả là (rất có thể) một ký tự khác.

Việc sửa chữa đúng nên trên MinGW dù:

Nó xảy ra với tôi rằng một giải pháp sẽ là: giải quyết nó tại GCC C thời gian chạy mức thư viện.
Tức là, đối với thư viện chạy thời gian chạy GCC trên Windows, bạn có thể thực hiện thông qua các tùy chọn thời gian xây dựng ở chế độ trong đó các tham số dòng lệnh (được chuyển tới main()) và chức năng tệp I/O sử dụng Windows cơ bản Các lệnh gọi API Unicode và dịch sang/từ mã hóa UTF-8 trong các hàm API chuẩn của C sử dụng các chuỗi byte.
Điều đó sẽ "chỉ hoạt động" đối với git có lẽ và có thể hữu ích cho các dự án mã nguồn mở có nguồn gốc Linux khác chạy môi trường Windows.

ak2 ý kiến ​​mà MingW không phải là nơi thích hợp cho sửa chữa này:

"MinGW trình biên dịch cung cấp quyền truy cập vào các chức năng của thời gian chạy Microsoft C và một số runtimes ngôn ngữ cụ thể
MinGW,. là Minimalist, không và sẽ không bao giờ cố gắng cung cấp môi trường chạy POSIX cho triển khai ứng dụng POSIX trên MS-Windows.
Nếu bạn muốn triển khai ứng dụng POSIX trên nền tảng này, hãy xem xét Cygwin thay thế. "

Có một số công việc đang tiến hành trên msysgit variant to support unicode.

+0

Vì vậy, trong khi chờ đợi, đó là XOR (Windows, git) VÀ dấu trọng âm trong tên tệp? – Benjol

+0

Lưu ý bên cạnh: những vấn đề đã được giải quyết trong Cygwin 1.7 và do đó cũng Cygwin git: nó dịch một cách chính xác giữa UTF-8 (hoặc bất kỳ bộ ký tự được chọn khác) và mã hóa tên tệp UTF-16 của Windows. – ak2

+0

@ ak2: đúng, nhưng msysgit không dựa trên cygwin ... @Benjol: đường dẫn và tên tệp không được có bất kỳ ký tự đặc biệt nào cho thời điểm này. – VonC

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