Git for Windowsでファイル名が長すぎる


665

Git-1.9.0-preview20140217Windows を使用しています。私が知っているように、このリリースでは、ファイル名が長すぎるという問題が修正されるはずです。私のためではない。

確かに私が何か間違ったことをやっている:私はやったgit config core.longpaths truegit add .してからgit commit。全てが上手く行きました。しかし、今を実行するgit statusFilename too long、たとえばでファイルのリストが表示されます。

node_modules/grunt-contrib-imagemin/node_modules/pngquant-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/test/integration/test-handle-source-errors.js: Filename too long

再現は非常に簡単です。Angularジェネレーター( "yo angular")を使用してYeoman Webアプリケーションを作成node_modulesし、.gitignoreファイルから削除するだけです。次に、前述のGitコマンドを繰り返します。

ここで何が欠けていますか?


そのバージョンでは長いファイル名を修正する必要があるとどこで読みますか?
iveqy 2014年

これがパッチのプルリクエストです:github.com/msysgit/git/pull/122
Papa

@PapaMufflonでは、受け入れられた回答をスコアの高い回答に変更できますか?それは私にとても役立ちました。
v.karbovnichy 2017年

@ v.karbovnichy私の質問を注意深く読んでください。私はすでにトップ投票の回答でコマンドを実行しました。しかし、私が質問したとき、受け入れられた答えは正しかった:msysにはまだこの文字制限がありました。これで制限がなくなり、git config core.longpaths trueは正常に機能します。
Papa Mufflon 2017年

はい

回答:


706

WindowsでGsysがmsysでコンパイルされている場合を除いて、Gitはファイル名に4096文字の制限があります。古いバージョンのWindows APIを使用しており、ファイル名には260文字の制限があります。

私がこれを理解している限り、これはGitではなくmsysの制限です。詳細については、https//github.com/msysgit/git/pull/110をご覧ください。

これを回避するには、Windowsで別のGitクライアントを使用するか、他の回答で説明さcore.longpathstrueているように設定します。

git config --system core.longpaths true

Gitは、スクリプトとコンパイルされたコードの組み合わせとしてビルドされます。上記の変更により、一部のスクリプトが失敗する可能性があります。これが、core.longpathsがデフォルトで有効にならない理由です。

https://docs.microsoft.com/en-us/windows/desktop/fileio/naming-a-fileにあるWindowsのドキュメントには、さらに詳しい情報があります。

Windows 10バージョン1607以降、一般的なWin32ファイルおよびディレクトリ関数からMAX_PATHの制限がなくなりました。ただし、新しい動作にオプトインする必要があります。

レジストリキーを使用すると、新しいロングパス動作を有効または無効にできます。ロングパス動作を有効にするには、レジストリキーをHKLM \ SYSTEM \ CurrentControlSet \ Control \ FileSystem LongPathsEnabledに設定します(タイプ:REG_DWORD)


19
パス内の260文字の制限はMSYSに固有のものではなく、一般的なWindows APIの模倣です。これはUnicodeパスを使用して回避できますが、これには他の欠点がありcore.longpathsます。そのため、デフォルトでは有効になっていません。Git for WindowsはMSYSに対してコンパイルされていないことにも注意してください。代わりに、それはストリップされたMSYS環境に付属するネイティブのWindowsアプリケーションです。
sschuberth 2015

3
@sschuberth:長いパスをサポートしないプログラムとの互換性がないこと以外に欠点はありますか?
JAB 2015

3
@JABもう1つの欠点は、長いパスは常に絶対パスでなければならないことです。相対パスはサポートされていません。詳細はを参照してくださいここに
sschuberth

4
または、簡単な修正として、WindowsでリポジトリをC:/にチェックアウトして、フォルダーパス文字の数を減らしてみてください。
Akshay Lokur 2016年

5
ちなみに、今でも問題は解決していません。私たちは、実際のオペレーティングシステム上で継続的な開発を検討する必要があります...
ゲーザTörök

1034

コマンドを実行できるはずです

git config --system core.longpaths true

または、サポートされているバージョンのGitになったら、Git構成ファイルの1つに手動で追加して、この機能をオンにします。1.9.0以降のようです。


13
この構成オプションにより、受け入れられた回答に記載されているmsysを使用しても、問題が解決しました。(具体的には、バージョン1.9.4.msysgit.2)。
Alex Osborn 2014

5
Sourcetreeが「埋め込まれたものではなく、システムのGitを使用していることも確認する」場合を除き、Sourcetreeは少し奇妙な動作をします。- そのアドバイスを提供してくれたMatej Drolcに感謝します
bstoney 2015年

38
ここでは、これはデフォルトで有効になっていない理由をいくつかの背景情報、およびいくつかの技術的な詳細があります。
sschuberth 2015

12
上記のコマンドを実行した後、「構成ファイルC:\ Program Files \ Git \ mingw64 / etc / gitconfigをロックできませんでした」を取得します。しかし、@ Yashの回答がうまくいきました
divideByZero

10
管理者としてgit bashを実行している@divideByZeroがそのエラーを防ぎます。
Niek、2016年

204

これは役立つかもしれません:

git config core.longpaths true

基本的な説明:この回答は、そのような設定をグローバルシステム(すべてのプロジェクトに適用するため、回避--systemまたは--globalタグ付け)構成に適用しないことをお勧めします。このコマンドは、現在のプロジェクトに固有であることによってのみ問題を解決します。


13
ここの人々は、この設定が予期しない動作を引き起こす可能性があることを指摘して--systemいるため、すべてのプロジェクトに適用する追加ではなく、必要なプロジェクトのローカル設定として上記のコマンドを使用することが望ましいようです
Grant Humphries

4
ねえ、それは他の非常に賛成された答えの単なるコピーパスタです。--systemオプションを削除した方がよい理由を少なくとも説明できるかもしれません。
-Grenier

78

.gitconfigを作成して追加

[core]
longpaths = true

プロジェクトの場所(わからない)とグローバルな場所にファイルを作成できます。私の場合、場所はC:\Users\{name}\です。


10
また、次のコマンドでこれを行うことができます:git config --global core.longpaths true
カーリー

git config --global core.longpaths trueはおかげで
うまくいき

1
Visual Studioを使用すると、上記のgit bashソリューションは機能しませんでしたが、プロジェクトの.git / configファイルを見つけて、上記のように編集しました。yashに感謝します。
アンドリューパテ

これは私にとっては
うまくいき

1
上記の検証済みの回答は正しいですが、ファイルに付与された権限では、これらのコマンドでファイルを更新できない場合があります。これは手動のアプローチなので、このアプローチは本当に簡単です。.gitconfig次のパスでファイルを簡単に見つけることができますC:\Users\{username}編集するだけです。
Kavindu Narathota

53

従うべき手順:

  1. 管理者としてGit Bashを実行する
  2. 次のコマンドを実行します。
git config --system core.longpaths true

:ステップ2が機能しないかエラーが発生する場合は、次のコマンドを実行してみることもできます。

git config --global core.longpaths true

詳細については、git config こちらをご覧ください


35

より良い解決策は、Gitからのロングパスパラメータを有効にすることです。

git config --system core.longpaths true

ただし、機能する回避策は、Gitからnode_modulesフォルダーを削除することです。

$ git rm -r --cached node_modules
$ vi .gitignore

.gitignoreファイル内の新しい行にnode_modulesを追加します。これを行った後、変更をプッシュします。

$ git add .gitignore
$ git commit -m "node_modules removed"
$ git push

3
node_modulesフォルダーをgitにチェックインしたままにしておくのには十分な理由があります。1年間モジュールがnpmから消失する可能性がある場合でも、ソフトウェアを同じように動作させたい場合。
cfstras

@cfstras一部のライブラリに脆弱性があり、定期的に更新しない場合、確かにセキュリティ上の問題が発生します。
Janderson Silva

1
もちろん、依存関係をアップグレードする必要があります。ただし、必要な場合にのみ、何かが壊れた場合は、gitでバックアップを作成する必要があります
。– cfstras

本当です。アンサーを編集します。コメントありがとうございます。
Janderson Silva 2016

1
コミットする必要はありませんnode_modulespackages.lockファイルnpm installを作成するまでは、によってインストールされたバージョンが常に同じになるようにここにありますnpm update
ピエールオリヴィエヴァレス

32

リポジトリが初期化された直後に確実に有効になるが、リモート履歴がフェッチされる前、またはファイルがチェックアウトされる前に、次のように使用する方が安全です。

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

-c key = value

新しく作成したリポジトリに構成変数を設定します。これは、リポジトリが初期化された直後、ただしリモート履歴がフェッチされる前、またはファイルがチェックアウトされる前に有効になります。キーはgit-config 1で期待されるものと同じ形式です(たとえば、core.eol = true)。同じキーに複数の値が指定されている場合、各値は構成ファイルに書き込まれます。これにより、たとえば、元のリモートにフェッチ参照仕様を追加することが安全になります。

より詳しい情報


24

実行git config --system core.longpaths trueするとエラーが発生しました:

「エラー:構成ファイルC:\ Program Files(x86)\ Git \ mingw32 / etc / gitconfigをロックできませんでした:権限が拒否されました」

グローバルレベルでコマンドを実行して修正:

git config --global core.longpaths true

グローバル設定は現在のユーザーにのみ影響しますが、システム設定はマシン上のすべてのユーザーに影響します。これがワークステーションの場合、1人のユーザーしか使用できないのと同じです。
タオル

4
コマンドラインアプリケーションを管理者として実行している場合、最初のコマンドが機能します。
Sachith Dickwella

12

長いファイルパスを有効にすることもできます。

Windows 10 Home Editionを実行している場合は、レジストリを変更して長いパスを有効にすることができます。

に移動しHKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystemregeditからに設定LongPathsEnabled1ます。

Windows 10 ProまたはEnterpriseを使用している場合は、ローカルグループポリシーを使用することもできます。

移動コンピュータの構成管理用テンプレートシステムファイルシステムではgpedit.msc、オープンWin32の長いパスを有効にし、それを設定し有効


5
これはgit configと組み合わせて行う必要があると思いますここで説明する理由により、Windowsエクスプローラーでは機能しないことに注意してください
Neo

11
git config --global core.longpaths true

上記のコマンドでうまくいきました。「--system」を使用すると、設定ファイルがロックされていないというエラーが発生しました


2
Githubデスクトップユーザーの場合、Githubデスクトップが独自のGit構成を使用するため、これが機能するのはこれだけです。
Csaba

4

リポジトリをドライブのルートに移動します(一時的な修正)

ローカルリポジトリ(フォルダ全体)を一時的にドライブのルートに移動するか、ルートにできるだけ近づけることができます。

ドライブのルートではパスが小さいため、問題が解決する場合があります。

Windowsでは、これをC:\別のドライブのルートに移動します。


2
これが私の問題を解決した唯一のものです。パスに含まれるフォルダが多すぎるということです。
J Brune

2

私にもこのエラーがありましたが、私の場合、原因は古いバージョンのnpm、v1.4.28の使用でした。

npm v3に更新した後、

rm -rf node_modules
npm -i

私のために働いた。npmの問題2697には、npm v3(2015年6月25日リリース)に含まれる「最大限フラットな」フォルダー構造の詳細があります。


1

暗号化されたパーティションで作業している場合は、フォルダーを/ tmpなどの暗号化されていないパーティションにgit pull移動し、を実行してから、元に戻すことを検討してください。


0

Windowsマシン

管理者としてコマンドプロンプトを実行し、以下のコマンドを実行します

git config --system core.longpaths true

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.