エラーが発生しました:
“error: Sparse checkout leaves no entry on the working directory”
windowsのgitでスパースチェックアウトを設定しようとしたとき。問題を調査し、ウェブ全体に広がる完全な答えを見つけた後、私は自分の質問に答えました。
ソースを保存するフォルダーから、git-bashプロンプトを使用して、Powershellを使用しない(以下の編集を参照):
git clone –n <repo> <local-directory-name>
cd <local-directory-name>
git config core.sparsecheckout true
echo some/sub-folder/you/want >> .git/info/sparse-checkout
git checkout <branch-name>
スパースチェックアウトを使用すると、リポジトリのサブセットで作業できます。大規模なリポジトリでスパースチェックアウトを設定するのは努力に値します。すべてがはるかに高速です!
「エラー:スパースチェックアウトで作業ディレクトリにエントリが残っていない」というエラーが発生するWindowsでの設定に苦労しました。少し調べた結果、次の手順は最小限であり、一貫して良い結果が得られました– YMMV。
最も重要な点はこれです–これらの手順でPOWERSHELL/CMDを使用しないでください– git bashプロンプトを使用してください。これは、それ以外の場合、echoコマンドがBOMマーカーを含むUNICODEファイルを生成するためです。 gitが正しく解析するには、ファイルはUNIXスタイルの行末を持つANSI形式のファイルである必要があります。これは、「エラー:スパースチェックアウトで作業ディレクトリにエントリが残されない」エラーの最も可能性の高い原因です。
ルートフォルダーにしたいディレクトリの親から、「src」というフォルダー名を想定して、次のことを行います。これにより、リポジトリ全体(引き続き必要です)が取得されますが、重要な点として、チェックアウトは実行されず、正しく設定されます。 Originのリモートおよびブランチトラッキングを設定します。
git clone –n <your repository> src
かなり空に見えるsrcフォルダーが必要です(.git隠しフォルダーがあります)。次を実行します。これにより、ローカルgit構成が更新されてスパースチェックアウトがオンになり、スパースチェックアウトを実行するときに含めるすべてのフォルダーをリストするファイルが.git/info非表示フォルダーに作成されます。これは後で編集して他のフォルダを追加できます。 重要:以下の場合は必ずgit bashプロンプトを使用し、UNIXの行末規則をサポートするエディターを使用して、スパースチェックアウトファイルを編集するときにANSIとして保存してください。そうしないと、「エラー:スパースチェックアウトでは、作業ディレクトリにエラーが残りません。 <path you want to checkout>
は次のようになります。path/to/subfolder
-先頭と末尾のパス区切り文字がないことに注意してください。
cd src
git config core.sparsecheckout true
echo <path you want to checkout> >> .git/info/sparse-checkout
これでチェックアウトの準備ができました。これにより、スパースチェックアウトフォルダのみが入力されたままになります。そうでない場合は、上記のすべてのスペルを慎重に確認してください。
git checkout <branch-name>
私は最近、Powershellのエコーが書き込み出力の同義語であることを発見しました。エンコードを指定できるout-file
コマンドにエコーをパイプすることにより、ASCII出力を取得できます。これにより、Powershellから動作し、正しいファイルの内容が得られます。
echo some/sub/folder/you/want | out-file -encoding ascii .git/info/sparse-checkout
マークされた答えは正しいですが、Windowsで「git bash」を使用する必要はありません。 PowerShellで同じことを行うのは簡単です:
Set-Content .git\info\sparse-checkout "some/sub-folder/you/want/*" -Encoding Ascii
これはANSIエンコーディングでファイルを作成しますが(当然のことながら)、CR LF(Windows)の行末で終了します。gitには問題がないように見えましたが、問題なく機能し、疎なチェックアウトに失敗しました。
Windows Server 2012でテスト済み。