web-dev-qa-db-ja.com

Windows git:「エラー:スパースチェックアウトで作業ディレクトリにエントリが残りません」

エラーが発生しました:

“error: Sparse checkout leaves no entry on the working directory”

windowsのgitでスパースチェックアウトを設定しようとしたとき。問題を調査し、ウェブ全体に広がる完全な答えを見つけた後、私は自分の質問に答えました。

24
James World

tl; dr

ソースを保存するフォルダーから、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形式のファイルである必要があります。これは、「エラー:スパースチェックアウトで作業ディレクトリにエントリが残されない」エラーの最も可能性の高い原因です。

  1. ルートフォルダーにしたいディレクトリの親から、「src」というフォルダー名を想定して、次のことを行います。これにより、リポジトリ全体(引き続き必要です)が取得されますが、重要な点として、チェックアウトは実行されず、正しく設定されます。 Originのリモートおよびブランチトラッキングを設定します。

    git clone –n <your repository> src
    
  2. かなり空に見える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
    
  3. これでチェックアウトの準備ができました。これにより、スパースチェックアウトフォルダのみが入力されたままになります。そうでない場合は、上記のすべてのスペルを慎重に確認してください。

    git checkout <branch-name>
    

編集-Powershellのエコー

私は最近、Powershellのエコーが書き込み出力の同義語であることを発見しました。エンコードを指定できるout-fileコマンドにエコーをパイプすることにより、ASCII出力を取得できます。これにより、Powershellから動作し、正しいファイルの内容が得られます。

echo some/sub/folder/you/want | out-file -encoding ascii .git/info/sparse-checkout
59
James World

マークされた答えは正しいですが、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でテスト済み。

0
Willem