26

LinuxからWindowsシステムにgitリポジトリのクローンを作成しているときに、フェーズのチェックアウトで次のエラーが発生します。

$ git clone gituser @ serveraddr:/git/git_repo.gitgit_WA'git_WA
'へのクローン作成...
gituser@ serveraddrのパスワード:
リモート:オブジェクトのカウント:500846、完了。
リモート:オブジェクトの圧縮:100%(118676/118676)、完了。
リモート:合計500846(delta 307739)、再利用483023(delta 291136)
オブジェクトの受信:100%(500846/500846)、907.54 MiB | 9.04 MiB / s、完了。
デルタの解決:100%(307739/307739)、完了。

エラー:ファイルRealRを作成できません******************************************* ************************************************** ************************************************** ************************************************** ************* validation.xml(そのようなファイルまたはディレクトリはありません)
ファイルのチェックアウト:100%(441329/441329)
ファイルのチェックアウト:100%(441329/441329)、完了。
終わり。

ケース2:ベアリポジトリとして複製され、ベアリポジトリからすべてローカルでチェックアウトされた=>同じエラー。

ケース3:リポジトリをC:\に直接複製し、チェックアウトに成功しました。エラーはありません。

->ファイル名/ファイルパスの長さ制限に問題があるようです。

ケース4:SVNリポジトリから同じファイルをチェックアウトします。どこでも問題なくチェックアウトできます。したがって、Windows側からは問題ありません。(はい、SVNとGITの両方にデータがあります。SVNからGITに移行したばかりです)。

したがって、問題はmsysgit内にある必要があり、ファイルパスの長さの制限があります。gitclient / msysgitのパスの長さを微調整できますか?

編集1:すべての操作はTortoiseGITクライアントv1.8.0およびgit-bashで試行されました:gitバージョン1.8.0.msysgit.0
Edit2:クローン作成中に使用される実際のコマンドを追加しました。

4

5 に答える 5

16

試す:

git config --system core.longpaths true

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

于 2017-01-13T12:22:32.617 に答える
5

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

回避策 1: プロジェクトをディスク ルートに近い新しい場所に移動します。アドバンテージ:

  • すべてが正常に動作するはずです (パスが 260 より長いファイルがないことを前提としています)。

不利益:

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

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

アドバンテージ:

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

不利益:

  • ジャンクションでの完全なファイル名は、260 シンボル未満にする必要があります。それ以外の場合、このソリューションは役に立ちません。
  • 長いファイルを変更したい場合
于 2014-05-03T12:33:22.207 に答える
2

同様の問題を考慮して、私が見た唯一の提案は次のとおりです。

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

于 2013-02-11T13:58:22.450 に答える