私はGit-1.9.0-preview20140217
をWindowsに使っています。私が知っているように、このリリースでは長すぎるファイル名の問題を解決するはずです。私のためではない。
git config core.longpaths true
とgit 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コマンドを繰り返します。
私はここで何が足りないのですか?
Gitがmsysでコンパイルされている場合を除き、Gitのファイル名の上限は4096文字です。これは古いバージョンのWindows APIを使用しており、ファイル名には260文字の制限があります。
私が理解している限りでは、Gitではなくmsysの制限です。あなたはここで詳細を読むことができます: https://github.com/msysgit/git/pull/110
これを回避するには、Windows上で別のGitクライアントを使用するか、他の回答で説明されているようにcore.longpaths
をtrue
に設定します。
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)
あなたはコマンドを実行することができるはずです
git config --system core.longpaths true
サポートされているバージョンのGitを使用している場合は、手動でGit設定ファイルに追加してこの機能を有効にすることもできます。 1.9.0以降かもしれません。
これは役に立つかもしれません:
git config core.longpaths true
基本的な説明:この答えはグローバルシステムに(--system
や--global
タグを避けるために)そのような設定を適用しないことを示唆しています。このコマンドは、現在のプロジェクトに固有のものであることによってのみ問題を解決します。
.gitconfigを作成して追加
[core]
longpaths = true
ファイルはプロジェクトの場所(確実ではない)にも、グローバルの場所にも作成できます。私の場合、場所はC:\Users\{name}\
です。
より良い解決策は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
git config --system core.longpaths true
git config
here についてもっと読んでください。
リポジトリが初期化された直後、ただしリモート履歴が取得される前、またはファイルがチェックアウトされる前に確実に有効になるようにするには、この方法を使用する方が安全です。
git clone -c core.longpaths=true <repo-url>
-c key = value
新しく作成されたリポジトリに設定変数を設定します。これは、リポジトリが初期化された直後、リモート履歴が取得される前、またはファイルがチェックアウトされる前に有効になります。キーはgit-config 1 で期待されているのと同じフォーマットです(例:core.eol = true)。同じキーに複数の値が指定されている場合は、それぞれの値が設定ファイルに書き込まれます。これにより、例えばOriginのリモートに追加のフェッチ参照仕様を追加することが安全になります。
長いファイルパスを有効にすることもできます。
Windows 10 Home Editionを実行している場合は、レジストリを変更して長いパスを有効にすることができます。
regedit
のHKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem
に移動してから、LongPathsEnabled
を1
に設定します。
Windows 10 ProまたはEnterpriseをお持ちの場合は、ローカルグループポリシーも使用できます。
コンピュータの設定 → 管理用テンプレート → システム → ファイルシステム をgpedit.msc
で開き、 Win32ロングパスを有効にする に設定し、 有効 に設定します。
git config --system core.longpaths true
を実行すると私にエラーが投げられました:
"エラー:設定ファイルC:\ Program Files(x86)\ Git\mingw32/etc/gitconfigをロックできませんでした:アクセス許可が拒否されました"
グローバルレベルでコマンドを実行すると修正されます。
git config --global core.longpaths true
ローカルリポジトリ(フォルダ全体)を一時的にドライブのルートに移動するか、できるだけルートに近づけてみてください。
パスがドライブのルートで小さいので、それは時々問題を解決します。
Windowsでは、これをC:\
または別のドライブのルートに移動します。
私もこのエラーを抱えていましたが、私の場合、原因は古いバージョンのnpm、v1.4.28を使用していました。
Npm v3に更新した後に
rm -rf node_modules
npm -i
私のために働いた。 npm issue 2697には、npm v3(2015-06-25リリース)に含まれる「最大限フラットな」フォルダ構造の詳細があります。
暗号化パーティションを使用している場合は、フォルダを暗号化されていないパーティション(たとえば /tmp )に移動し、git pull
を実行してから元に戻すことを検討してください。