web-dev-qa-db-ja.com

gitチェックアウトエラー:ファイルを作成できません

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:複製中に使用される実際のコマンドを追加しました。

20
rohit

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の制限未満に保ちました。

16
StevenHB

試してください:

git config --system core.longpaths true

これにより、ファイルパスが長くてもファイルをチェックアウトできます。 Windowsは許可されたしきい値よりも長いパスの削除を許可しないため、これを削除しようとすると問題が発生します。これに対する回避策は、ローカルリポジトリ内のフォルダの名前を変更して、パス全体の長さを短くすることです。たとえば、alpha/beta/gamma/universe.txtであるパスは、1/2/3/universe.txtに制限できるため、長さがWindowsのファイルサイズのしきい値を下回ります。

9
Waqas Shah

多くのWindows APIは、ファイルパス名のシンボルが260に制限されています。したがって、gitは260シンボルを超える名前のファイルを作成できません。 NTFSファイルシステムは実際には長い名前(32k)をサポートしていますが、プログラムに長い名前を許可する簡単な方法はありません。

回避策1:プロジェクトをディスクのルートに近い新しい場所に移動します。利点:

  • すべてが正常に機能するはずです(パスが260より長いファイルがない場合)

不利益:

  • プロジェクトの場所を変更する必要があります

回避策2:ディスクルートに近いフォルダーからプロジェクトフォルダーに Junction を作成し、junctionフォルダーからgit cloneを実行します。これは、mklinkコマンドまたは Link Shell Extension を使用して行うことができます。

利点:

  • 長いファイル名(260を超える)を使用できます
  • プロジェクトの場所を保存できます
  • 最初のクローン作成後にジャンクションを安全に削除することができます(元の場所での260シンボル制限に違反するファイルを操作する必要がない場合)

不利益:

  • ジャンクションでの完全なファイル名は、260未満のシンボルでなければなりません。そうでなければ、この解決策は役に立ちません。
  • 長いファイルを変更したい場合
5
Alexei Osipov

同様の問題 を考慮して、私が見た唯一の提案は:

回避策: 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 ...)では長いパスがサポートされていないため、これはデフォルトで無効になっています。
これを有効にするのは、自分が何をしているのかを知っていて、いくつかの癖を付けて生きる準備ができている場合のみです。

2
VonC

Windows PowerShellを使用します。私のために働いた。

0