エラーファイル名が長すぎるため、git pullが中止されました


114

私はOSとしてWindowsを使用しており、Macを使用している友人とプロジェクトに取り組んでいます。彼はコードをGithubにチェックインしました。

私は彼がしたことすべてをgit pullしようとしていて、サードパーティのコードの「filename too long」エラーで中止しました。

私に何ができる?


この問題には、操作に応じて、主に2つの異なるケースがあります。リポジトリがすでに存在する場合は、その構成を編集できます。しかしそうでなければ?新しいディレクトリを作成してクローン作成/チェックアウトする場合は、@ AlexRosenfeldの回答のみが役立ちます。
Gangnus 2017年

回答:


200

Gitのmsysgit FAQ は、古いmsysgit チケット#110にリンクしているため、長いパスでファイルディレクトリを作成できません。ただし、後のチケット#122によると、問題はmsysgit 1.9で修正されたため、次のようになります。

  1. msysgit 1.9(以降)への更新
  2. Git Bashを起動する
  3. 長いパスの問題に「苦しんでいる」Gitリポジトリに移動します
  4. で長いパスのサポートを有効にする git config core.longpaths true

これまでのところ、それは私のために非常にうまくいきました。

チケット#122のコメントで重要な通知に注意してください

ここに戻って、Windowsエクスプローラー、cmd.exe、bash、または使用しているすべてのツールが壊れると文句を言わないでください。


更新がいくつかあり、mysysgit github.com/msysgit/git/pull/122#issuecomment-43653756
Adam Grant

18
実際に機能したのは:git config --global core.longpaths true
Anton Andreev

@AntonAndreevうん、グローバルスコープで設定したい場合は、それで問題ありません。リポジトリごとのローカルスコープも完全に有効です。
mloskot 2015

グローバルレベルで設定しなければ、私にはうまくいきませんでした。
アントンアンドレエフ2015

1
この方法は、新しいディレクトリを作成するクローン作成/チェックアウトでは機能しません。@AlexRosenfeldの答えだけが役に立ちます。
Gangnus

69

Solution1-次のコマンドを実行して、グローバル構成を設定します。

git config --system core.longpaths true

Solution2-または、以下のように特定のgit構成ファイルを直接編集できます。

YourRepoFolder-> .git-> config:

[core]
    repositoryformatversion = 0
    filemode = false
    ...
    longpaths = true        <-- (add this line under core section)

Solution3-新しいリポジトリを複製する場合:ここ


1
この方法は、新しいディレクトリを作成するクローン作成/チェックアウトでは機能しません。@AlexRosenfeldの答えだけが役に立ちます。
Gangnus 2017年

回答を1か所にまとめて更新しました。ありがとうございます。
DanielHári2017年

26

数年遅れますが、これを一気に行う必要がある場合は(私が行ったように)、cloneコマンドの間に構成設定を設定できることを付け加えておきます。これを試して:

git clone -c core.longpaths=true <your.url.here>

1
歓声メイト!これは、githubから新しいディレクトリを複製するときにうまく機能しました。
Jay Killeen

それが助けてくれてうれしいです!
xandermonkey 2016年

1
はい!これ、そしてクローンのために-これだけが機能します!
Gangnus 2017年

これは機能しません、私のクローンはまだ中止されます。私はを使用していますgit version 1.8.4.msysgit.0、何かアイデアはありますか?
シンプルなソリューション

廃止予定のようです。おそらくgit-scmを使用してみてくださいどのようなエラーが発生しますか?
xandermonkey 2017年

12

.gitconfigファイルを開いてlongpathsプロパティを追加します。したがって、次のようになります。

[core]
symlinks = false
autocrlf = true
longpaths = true

1
この方法は、新しいディレクトリを作成するクローン作成/チェックアウトでは機能しません。@AlexRosenfeldの答えだけが役に立ちます。
Gangnus 2017年

6

WindowsのJavaリポジトリでこの問題に絶えず遭遇した誰かとして、Cygwin(https://www.cygwin.com/)をインストールし、すべての> devel> gitでgitインストールを使用するのが最善の解決策です。

これが私が遭遇した最良のソリューションである理由は、Cygwinが長いパス名を管理するため、他の提供されたコマンドが役立つためです。例:find、cp、rm。Windowsで長すぎるパス名を削除しなければならないときに、本当の問題が始まります。


4

ファイルをファイルシステムのルートに近づけるようにしてください。詳細:技術的な理由により、絶対パスが260文字を超える場合Git for Windowsはファイルまたはディレクトリを作成できません


デフォルトでは130 [たぶんWindowsは2バイトのUnicode文字を使用する]に
しか到達

5
より多くの人々がマイクロソフトにこの制限を変更するように要求するべきです(そして彼らが破ったレガシーAPIを修正します)。ファイル名が<8>。<3>文字に制限されていたこの残りの日を生き続ける必要がある理由はありません。すぐに直さないことで、大きな穴が掘られています。スラッシュの方向を修正します。
チェンバレン2015

@cchamberlain C:/ foo / bar / bazは完全に有効ですが、\ foo \ bar \ bazも有効です(現在の作業ディレクトリが存在するすべての論理ドライブを参照します)/ foo / bar / bazは、コマンドラインフラグ。
JAB 2015

@JAB-スラッシュが時々機能することは事実ですが、あなたが指摘したように、それは信頼できません。cmd.exeはある方法で反応し、別の方法でpowershellします。オートコンプリートブレーク。基盤となるAPIはそれを理解しますが、cmd.exeがすべての場合に対応するわけではなく、バックスラッシュをより安全に使用すると、文字列をエスケープする必要がある場合があります。一般的なWindowsパスに存在するスペースと括弧の数を含むコマンドラインのバックスラッシュガベージはすでに十分にあります。
チェンバレン2015

2
解決策ではありません。テクノロジーは人間のしもべであるべきであり、人間はテクノロジーのしもべであるべきではありません。
ダニエル・ハリ

4

Windowsでは、管理者として「cmd」を実行し、コマンドを実行します。

"C:\Program Files\Git\mingw64\etc>"
"git config --system core.longpaths true"

または、gitがインストールされているフォルダーのchmodを実行する必要があります。

またはmanullayパス「Git \ mingw64 \ etc」に移動して手動でファイルを更新します

[http]
    sslBackend = schannel
[diff "astextplain"]
    textconv = astextplain
[filter "lfs"]
    clean = git-lfs clean -- %f
    smudge = git-lfs smudge -- %f
    process = git-lfs filter-process
    required = true
[credential]
    helper = manager
**[core]
    longpaths = true**
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.