2012-05-21 27 views
6

Đối với các ký tự không phải ASCII trong tên tệp, Git sẽ xuất chúng theo ký hiệu bát phân octal. Ví dụ:Git: cách chỉ định tên tệp có chứa ký hiệu bát phân trên dòng lệnh

> git ls-files 
"\337.txt" 

Nếu như một chuỗi byte không đại diện cho một mã hóa pháp lý (đối với mã hóa hiện tại dòng lệnh của), tôi không thể nhập các chuỗi tương ứng trên dòng lệnh. Làm thế nào tôi vẫn có thể gọi lệnh Git trên các tập tin này? Rõ ràng, bằng cách sử dụng chuỗi được hiển thị bởi git ls-files không hoạt động:

> git rm "\337.txt" 
fatal: pathspec '337.txt' did not match any files 

Thử nghiệm trên Windows, với msysgit 1.7.10 (git phiên bản 1.7.10.msysgit.1)

+0

Xem [Cách đặt Git hiển thị đúng tên đường dẫn được mã hóa UTF-8 trong cửa sổ bảng điều khiển?] (Https://stackoverflow.com/questions/22827239/how-to-make-git-properly-display-utf-8 -encoded-pathnames-in-the-console-window). 'git config --global core.quotepath off' –

Trả lời

9

Trong Bash, bạn có thể sử dụng printf cho loại mục đích này:

$ echo `printf "\337.txt"` 
▒.txt 

$ git rm `printf "\337.txt"` # this would pass the awkward filename to git 

Vấn đề là, rõ ràng là vỏ không thực hiện thoát bát phân, cũng không git. Nhưng printf thì có.


Ngoài ra, echo -e có thể làm thoát bát phân:

$ echo -e '\0337.txt' 
▒.txt 

Nhưng việc sử dụng đó là một chút nản lòng, bạn nên thích printf nơi bạn có thể.

+0

Làm cách nào để sử dụng kết hợp với lệnh Git? Nếu tôi đã cài đặt msysgit thì sao? – mstrap

+0

@mstrap Tôi hy vọng rằng msys cung cấp một tiện ích 'printf', bởi vì nó là một posix chuẩn. Bạn nên thử nếu nó có sẵn cho bạn. Đồng thời xem chỉnh sửa. – ulidtko

+1

Phiên bản printf hoạt động hoàn hảo từ bên trong bash của msysgit. Cảm ơn! – mstrap

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