web-dev-qa-db-ja.com

Git for Windowsのファイル名が長すぎます

私はGit-1.9.0-preview20140217をWindowsに使っています。私が知っているように、このリリースでは長すぎるファイル名の問題を解決するはずです。私のためではない。

git config core.longpaths truegit add .そしてgit commitをやったのです。全てが上手く行きました。しかし、今git statusを実行すると、Filename 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コマンドを繰り返します。

私はここで何が足りないのですか?

491
Papa Mufflon

Gitが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/ja-jp/windows/desktop/fileio/naming-a-file にあるwindowsのドキュメントには、さらに詳しい情報があります。

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

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

367
iveqy

あなたはコマンドを実行することができるはずです

git config --system core.longpaths true

サポートされているバージョンのGitを使用している場合は、手動でGit設定ファイルに追加してこの機能を有効にすることもできます。 1.9.0以降かもしれません。

966
sparkym3

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

git config core.longpaths true

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

167

.gitconfigを作成して追加

[core]
longpaths = true

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

58
Yash

より良い解決策はGitのlongpathパラメータを有効にすることです。

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
33
Janderson Silva

従うべきステップ:

  1. 開始 Git Bash as 管理者
  2. 実行コマンドgit config --system core.longpaths true

git confighere についてもっと読んでください。

29
Saikat

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

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

-c key = value

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

詳細情報

25
gugol

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

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

regeditHKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystemに移動してから、LongPathsEnabled1に設定します。

Windows 10 ProまたはEnterpriseをお持ちの場合は、ローカルグループポリシーも使用できます。

コンピュータの設定 管理用テンプレート システム ファイルシステム gpedit.mscで開き、 Win32ロングパスを有効にする に設定し、 有効 に設定します。

7
Julian Veerkamp

git config --system core.longpaths trueを実行すると私にエラーが投げられました:

"エラー:設定ファイルC:\ Program Files(x86)\ Git\mingw32/etc/gitconfigをロックできませんでした:アクセス許可が拒否されました"

グローバルレベルでコマンドを実行すると修正されます。

git config --global core.longpaths true
5
Arpit

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

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

パスがドライブのルートで小さいので、それは時々問題を解決します。

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

4
Dheeraj Bhaskar

私もこのエラーを抱えていましたが、私の場合、原因は古いバージョンのnpm、v1.4.28を使用していました。

Npm v3に更新した後に

rm -rf node_modules
npm -i

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

2
James Green

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

1
augustowebd