私は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") を使用して Web アプリケーションを作成し、ファイルnode_modules
から削除します.gitignore
。次に、前述の Git コマンドを繰り返します。
ここで何が欠けているのでしょうか?
ベストアンサー1
Git ではファイル名に 4096 文字の制限があります (ただし、Windows では Git が msys でコンパイルされている場合は例外です)。Windows API の古いバージョンが使用され、ファイル名には 260 文字の制限があります。
私の理解する限り、これは msys の制限であり、Git の制限ではありません。詳細については、以下を参照してください。https://github.com/msysgit/git/pull/110
これを回避するには、Windows で別の Git クライアントを使用するか、他の回答で説明されているようにcore.longpaths
設定してください。true
git config --system core.longpaths true
注:https://github.com/desktop/desktop/issues/8023#issuecomment-515115353Githubデスクトップ(および他のGit GUIも)は--global
設定を読み取りますが、--system
設定は読み取りません。
Git はスクリプトとコンパイルされたコードの組み合わせとして構築されます。上記の変更により、一部のスクリプトが失敗する可能性があります。これが、core.longpaths がデフォルトで有効になっていない理由です。
Windowsのドキュメントhttps://learn.microsoft.com/en-us/windows/win32/fileio/maximum-file-path-limitation?tabs=cmd#enable-long-paths-in-windows-10-version-1607-and-laterさらに詳しい情報があります:
Windows 10 バージョン 1607 以降では、一般的な Win32 ファイルおよびディレクトリ関数から MAX_PATH の制限が削除されました。ただし、新しい動作を選択する必要があります。
レジストリ キーを使用すると、新しい長いパスの動作を有効または無効にできます。長いパスの動作を有効にするには、レジストリ キーを HKLM\SYSTEM\CurrentControlSet\Control\FileSystem\LongPathsEnabled (タイプ: REG_DWORD) に設定します。