ファイルを含む Mercurial リポジトリにフォルダ階層をコミットしようとしましたが、絶対パスの長さが 255 文字 (Windows の最大パス長) を超えています。
これらのファイルについて、次のエラーメッセージが表示されます
指定されたパスが見つかりません
TortoiseHG と Mercurial 用の Eclipse プラグインを使用していますが、どちらも機能しません。
誰かがこれに対する解決策を見つけましたか? (HD 上のリポジトリの場所を変更したくありません)
ファイルを含む Mercurial リポジトリにフォルダ階層をコミットしようとしましたが、絶対パスの長さが 255 文字 (Windows の最大パス長) を超えています。
これらのファイルについて、次のエラーメッセージが表示されます
指定されたパスが見つかりません
TortoiseHG と Mercurial 用の Eclipse プラグインを使用していますが、どちらも機能しません。
誰かがこれに対する解決策を見つけましたか? (HD 上のリポジトリの場所を変更したくありません)
この正確な問題を解決することを目的とした拡張機能が存在します。それは: https://www.mercurial-scm.org/wiki/Win32LongFileNamesExtension
\\?\ スタイル名を使用して、長いファイルを透過的に処理します。
私は著者です、それがあなたのために働くかどうか私に知らせてください。
彼が提案したように、 Aaron Cohenの拡張機能をインストールしました。そして、それは私の TortoiseHG 2.6.1 で完全に動作します! ありがとう、アーロン!
ただし、詳細なガイドが見つからないため、ここに詳細なガイドを追加したいと思います...
(少なくともこれが私がWin7 x64で行ったことです-これが可能な最短の方法であるかどうかはわかりません)
setx PYTHONPATH d:\Python27\Lib\site-packages\win32lfn\src;d:\Python27\Lib\site-packages\mercurial\
cd /D D:\Python27
python d:\Python27\Lib\site-packages\win32lfn\tests\testwin32lfn.py
[extensions]
win32lfn = d:\Python27\Lib\site-packages\win32lfn\src\win32lfn.py
手っ取り早い解決策は、ネットワークドライブをマッピングすることです。
パスc:\ some long path\projectフォルダーの場合
\\ localhost \ c $ \ some long path \をドライブZ:\にマップします
cd z:\project folder
hg push
より短いパスに移行する前に、これを暫定的な解決策としてうまく使用しています。
上記のMercurialプラグインは見栄えがしますが、残念ながら、255文字を超えるパスに関連する非Mercurialバグが多数あります。たとえば、正確に259文字でのVS2010の失敗は、本当のコーカーです。
https://www.mercurial-scm.org/wiki/Win32LongFileNamesExtensionを参照してください(Aaron が mercurial-devel メーリング リストで指摘しました)。
リポジトリへのパスを変更しない別の回避策は、ディレクトリ ジャンクション ポイントを使用してリポジトリへの 2 つ目のパスを作成することです。再解析はファイル システム ドライバー (または、インストールされているフィルター) によって非常に低いレベルで行われるため、その時点で完全な (Unicode) パスがわかっているため、260 文字を超える拡張は正常に機能するはずです。試してみる。このツールmklink
は Windows Vista または 7 で使用でき、 junction.exe
Windows 2000 以降では Sysinternals から使用できます。mklink
必ず接合点を作成してください。再解析メカニズムがディレクトリのシンボリックリンクに対して同じように機能するかどうかはわかりません(そうすべきであることをかすかに覚えていますが)。
使用可能なプログラムの Unicode バージョンがない場合、制限は 260 文字 (ドライブ文字部分を含む) です。それを回避するものは何もありません。
ただし、すべての ANSI 関数は対応する Unicode を使用して実装されているため、先頭に\\?\
. これは機能するかもしれませんが、プログラム自体がMAX_PATH
(= 260) を超えて何も考慮していないため、機能しない可能性があります。作成者に Unicode バージョンをコンパイルしてもらい、私が言及した接頭辞を使用してください。これで問題は解決します。
これは Win32 サブシステムの制限です。絶対パスの長さの制限は、約 32,767 文字です。おおよそ、Windowsのオブジェクトマネージャが展開する可能性があるためです(オブジェクトの名前空間内のシンボリックリンクなど)。