LinuxからWindowsシステムにgitリポジトリのクローンを作成しているときに、フェーズのチェックアウトで次のエラーが発生します。
$ git clone gituser @ serveraddr:/git/git_repo.git git_WA
「git_WA」に複製しています...
gituser @ serveraddrのパスワード:
リモート:オブジェクトのカウント:500846、完了。
リモート:オブジェクトの圧縮:100%(118676/118676)、完了。
リモート:合計500846(デルタ307739)、再利用483023(デルタ291136)
受信オブジェクト:100%(500846/500846)、907.54 MiB | 9.04 MiB /秒、完了。
デルタの解決:100%(307739/307739)、完了。エラー:ファイルを作成できませんRealR ******************************************* ************************************************** ************************************************** ************************************************** ************* validation.xml(そのようなファイルまたはディレクトリはありません)
ファイルのチェックアウト:100%(441329/441329)
ファイルのチェックアウト:100%(441329/441329)、完了。
完了。
ケース2:ベアリポジトリとして複製され、ベアリポジトリからすべてローカルでチェックアウトされた=>同じエラー。
ケース3:C:\でリポジトリを直接複製し、チェックアウトは成功し、エラーは発生しません。
->ファイル名/ファイルパスの長さの制限に問題があるようです。
ケース4:SVNリポジトリから同じファイルをチェックアウトします。どこでも問題なくチェックアウトできます。したがって、ウィンドウ側から問題はありません。 (はい、SVNとGITの両方にデータがあります。SVNからGITに移行したところです)。
したがって、問題はmsysgit内である必要があり、ファイルパスの長さに制限があります。 gitclient/msysgitのパスの長さを微調整できますか?
Edit1:TortoiseGIT client v1.8.およびgit-bash:git version 1.8.0.msysgit.。
Edit2:複製中に使用される実際のコマンドを追加しました。
67Windows)または76-(cygwin)文字の基本パスを持つWindowsディレクトリにプロジェクトをチェックアウトするときに、同様の問題が発生しました-チェックアウトされたファイルのパス長に追加すると、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
---(gitリポジトリをc:\ gitにチェックアウトすることで問題を解決しました、これは長さが6または15文字で、最大パス長をWindowsの制限未満に保ちました。
試してください:
git config --system core.longpaths true
これにより、ファイルパスが長くてもファイルをチェックアウトできます。 Windowsは許可されたしきい値よりも長いパスの削除を許可しないため、これを削除しようとすると問題が発生します。これに対する回避策は、ローカルリポジトリ内のフォルダの名前を変更して、パス全体の長さを短くすることです。たとえば、alpha/beta/gamma/universe.txtであるパスは、1/2/3/universe.txtに制限できるため、長さがWindowsのファイルサイズのしきい値を下回ります。
多くのWindows APIは、ファイルパス名のシンボルが260に制限されています。したがって、gitは260シンボルを超える名前のファイルを作成できません。 NTFSファイルシステムは実際には長い名前(32k)をサポートしていますが、プログラムに長い名前を許可する簡単な方法はありません。
回避策1:プロジェクトをディスクのルートに近い新しい場所に移動します。利点:
不利益:
回避策2:ディスクルートに近いフォルダーからプロジェクトフォルダーに Junction を作成し、junctionフォルダーからgit cloneを実行します。これは、mklink
コマンドまたは Link Shell Extension を使用して行うことができます。
利点:
不利益:
同様の問題 を考慮して、私が見た唯一の提案は:
回避策: http://www.cygwin.com/ を使用します
または、少なくともmsysgitの git-bashセッション でのチェックアウトが適切に機能するかどうかを確認します。
2015年5月の更新(2年後):
注: 最新の2.4.1 git-for-windowsが提案 :
core.longpaths::
Git for Windowsの組み込みコマンドの長いパス(> 260)サポートを有効にします。
Windowsエクスプローラー、cmd.exe、およびGit for Windowsツールチェーン(msys、bash、tcl、Perl ...)では長いパスがサポートされていないため、これはデフォルトで無効になっています。
これを有効にするのは、自分が何をしているのかを知っていて、いくつかの癖を付けて生きる準備ができている場合のみです。
Windows PowerShellを使用します。私のために働いた。