2013-02-11 55 views
11

Trong khi nhân bản một kho git từ Linux sang một hệ thống Windows, tôi nhận được lỗi sau đây trong thanh toán giai đoạn:git lỗi thanh toán: không thể tạo tập tin

$ git clone [email protected]:/git/git_repo.git git_WA
Cloning into 'git_WA'...
[email protected]'s password:
remote: Counting objects: 500846, done.
remote: Compressing objects: 100% (118676/118676), done.
remote: Total 500846 (delta 307739), reused 483023 (delta 291136)
Receiving objects: 100% (500846/500846), 907.54 MiB | 9.04 MiB/s, done.
Resolving deltas: 100% (307739/307739), done.

error: unable to create file RealR**************************************************************************************************************************************************************************************************************validation.xml (No such file or directory)
Checking out files: 100% (441329/441329)
Checking out files: 100% (441329/441329), done.
done.

Case-2: nhân bản vô tính repo như trần, kiểm tra tất cả từ repo trần cục bộ => Lỗi tương tự.

Trường hợp-3: Sao chép repo bằng C: \ trực tiếp, thanh toán thành công, Không có lỗi.

-> Có vẻ như vấn đề với giới hạn độ dài tên tệp/filepath.

Trường hợp-4: kiểm tra cùng một tệp từ repo SVN. Có thể thanh toán tại bất kỳ vị trí nào mà không có bất kỳ vấn đề gì. Do đó không có vấn đề từ phía cửa sổ. (Có, l có dữ liệu trong SVN và GIT cả, tôi vừa chuyển từ SVN sang GIT).

Do đó, sự cố phải nằm trong phạm vi msysgit, một số giới hạn độ dài filepath. Chiều dài đường dẫn trong gitclient/msysgit có được điều chỉnh không?

Edit1: Tất cả các hoạt động thử với TortoiseGit client v1.8.0git-bash: git phiên bản 1.8.0.msysgit.0.
Chỉnh sửa2: Thêm lệnh thực tế được sử dụng trong khi nhân bản.

Trả lời

2

Các gợi ý duy nhất tôi nhìn thấy, xem xét một similar issue, là:

Workaround: use http://www.cygwin.com/

Hoặc ít nhất kiểm tra xem một kiểm tra trong một git-bash session của msysgit hoạt động tốt hơn.


Cập nhật tháng năm 2015 (2 năm sau):

Lưu ý: latest 2.4.1 git-for-windows proposes:

core.longpaths:: 

Enable long path (> 260) support for builtin commands in Git for Windows.
This is disabled by default, as long paths are not supported by Windows Explorer, cmd.exe and the Git for Windows tool chain (msys, bash, tcl, perl...).
Only enable this if you know what you're doing and are prepared to live with a few quirks.

+0

Tôi đã thử tất cả các hoạt động này với git-bash: git phiên bản 1.8.0.msysgit.0 và TortoiseGIT client v1.8.0 sử dụng nội bộ cùng một msysgit. Đã chỉnh sửa câu hỏi với cùng một thông tin. – rohit

+0

@rohit cygwin sẽ cung cấp một môi trường hoàn toàn khác, điều này sẽ hỗ trợ độ dài đường dẫn dài hơn (http://stackoverflow.com/questions/3144082/difference-between-msysgit-and-cygwin-git/3144417#3144417). Windows-based git-client không thể nhận được đường dẫn giới hạn độ dài đường dẫn của Windows. – VonC

+0

Tôi đã thử với _git-bash_ luôn chạy với môi trường _cygwin_. Ngoài ra, tôi đã cài đặt _cygwin_ độc lập trên hệ thống của mình. Vì vậy, thử thanh toán với _cygwin_ là tốt, nhưng phải đối mặt chính xác cùng một vấn đề. Tôi đang làm sai ở bất cứ đâu. – rohit

11

tôi có kinh nghiệm vấn đề tương tự khi kiểm tra ra một dự án vào một thư mục Windows mà có một đường dẫn cơ sở nhân vật 67- (Windows) hoặc 76- (cygwin) - khi được thêm vào chiều dài đường dẫn của các tệp đã kiểm tra, nó vượt quá giới hạn độ dài đường dẫn của Windows:

git checkout -f HEAD 
error: unable to create file <194-character filepath> (No such file or directory) 
fatal: cannot create directory at '<187-character directory path>': No such file 
or directory 

Tôi đã giải quyết vấn đề bằng cách kiểm tra c: \ git, dài 6 hoặc 15 ký tự, giữ độ dài đường dẫn tối đa trong giới hạn Windows.

+0

+1 Đã xảy ra sự cố tương tự - câu trả lời tuyệt vời –

+0

Đây là vấn đề đối với bản thân tôi. Một chỉ báo tốt cho vấn đề này là một tệp có tên đặc biệt dài sẽ không thành công sau khi các tệp khác thành công. – Shadetheartist

5

Nhiều API Windows bị giới hạn ở 260 ký hiệu cho tên đường dẫn tệp. Vì vậy, git không thể tạo các tệp có tên dài hơn 260 ký hiệu. Hệ thống tệp NTFS thực sự hỗ trợ tên dài hơn (32k) nhưng không có cách nào dễ dàng để cho phép tên dài cho các chương trình.

Cách giải quyết 1: di chuyển dự án của bạn đến một vị trí mới, gần với gốc đĩa. Ưu điểm:

  • Tất cả mọi thứ sẽ làm việc tốt (giả sử không có tập tin với con đường dài hơn 260)

Nhược điểm:

  • Bạn cần phải thay đổi vị trí dự án

Cách giải quyết 2: tạo một Junction vào thư mục dự án của bạn từ một thư mục gần với di sk root và làm git clone từ thư mục junction. Bạn có thể thực hiện việc này với lệnh mklink hoặc Link Shell Extension.

Ưu điểm:

  • Bạn có thể có tên tập tin dài (lớn hơn 260)
  • Bạn có thể vị trí dự án bảo quản
  • Bạn có thể xóa một cách an toàn ngã ba sau khi nhân bản ban đầu (nếu bạn không cần phải làm việc với các tập tin vi phạm 260 biểu tượng giới hạn ở vị trí ban đầu)

Nhược điểm:

  • Tên tệp đầy đủ tại đường giao nhau vẫn phải có ít hơn 260 ký hiệu. Nếu không, giải pháp này sẽ không giúp ích gì.
  • Nếu bạn muốn sửa đổi các tệp có độ dài
-1

Sử dụng Windows PowerShell. Đã làm cho tôi.

2

Hãy thử:

git config --system core.longpaths true 

này sẽ cho phép nó để kiểm tra các tập tin ngay cả với filepaths lâu hơn. Vấn đề với điều này sẽ là khi bạn cố gắng xóa nó, vì Windows sẽ không cho phép xóa đường dẫn dài hơn ngưỡng cho phép. Giải pháp thay thế cho việc này là đổi tên các thư mục trong kho lưu trữ cục bộ, để tổng chiều dài của đường dẫn được giảm bớt. Ví dụ: một đường dẫn là alpha/beta/gamma/universe.txt, có thể bị giới hạn ở 1/2/3/universe.txt, do đó chiều dài của nó nằm dưới ngưỡng kích thước cửa sổ.

+0

chạy từ Git Bash với đặc quyền nâng cao (chạy dưới dạng quản trị viên) – dashesy