質問: リモートリポジトリ側が下記のようなフォルダ構成の際 「ghi」フォルダ配下の「jkl」や「mno」等の中身だけを取得したいです。 ``` [origin/master] root/ ├ abc/ ├ def/ ├ ghi/ │ └ jkl/ │ └ mno/ └ pqr/ ``` ローカルのgitは設定済みで `.git/info/sparse-checkout` ファイル内には `jkl/` とのみ記載し、`git pull` したところ、次のようなフォルダ構成になります。 ※「root」フォルダ名はリモートとローカルで異なります。 ``` [master] root/ └ ghi/ └ jkl/ └ mno/ ``` 希望としては、次のようなフォルダ構成にしたいのですが可能でしょうか。 ``` [master] root/ └ jkl/ └ mno/ ``` 以上です。よろしくお願いします。
回答: おそらく`sparse-checkout`できないと思います。`ghi`ディレクトリはもともとGitが管理しているディレクトリ構造であるため、それを変更すると変更履歴が生じます。 また、`.git/info/sparse-checkout`に記述された内容はルートからのディレクトリ名などではなく、マッチするパターンになります。 `sparse-checkout`の使い所はモノレポなどの単一かつ同一のGitリポジトリ内にある複数のディレクトリの内、必要なディレクトリだけを取ってきて作業するために使うので、ディレクトリ構造そのものを変更するような場合に向いていないでしょう。 単純にリモートのリポジトリから最新のディレクト/ファイルを取得したいだけであればsubmoduleなり、別の場所でsparse-checkoutしてディレクトリ移動するなり、利用できるのであればgit-archiveを使うなりしたほうが良いと思います。 **コマンド参考例** ``` git init git remote add origin [your-repo-url] git sparse-checkout init git sparse-checkout set jkl # jklにマッチするパターンをpull対象とする git pull origin master # ghi/jkl が降ってくる git log # ここでgit log叩くとわかりますが、履歴はoriginのもの mv ./ghi/jkl ./jkl # 移動してみる git status # 変更履歴が出てくるはず ``` 参考 * CONE PATTERN SET