73499


リモートリポジトリ側が下記のようなフォルダ構成の際  
「ghi」フォルダ配下の「jkl」や「mno」等の中身だけを取得したいです。

[code]

    [origin/master]
    root/
    　├ abc/
    　├ def/
    　├ ghi/
    　│　└ jkl/
    　│　　　└ mno/
    　└ pqr/
    
[/code]

ローカルのgitは設定済みで `.git/info/sparse-checkout` ファイル内には  
`jkl/` とのみ記載し、`git pull` したところ、次のようなフォルダ構成になります。  
※「root」フォルダ名はリモートとローカルで異なります。

[code]

    [master]
    root/
    　└ ghi/
    　 　└ jkl/
    　 　　　└ mno/
    
[/code]

希望としては、次のようなフォルダ構成にしたいのですが可能でしょうか。

[code]

    [master]
    root/
    　└ jkl/
    　 　└ mno/
    
[/code]

以上です。よろしくお願いします。


CC BY-SA 4.0
2021-01-22T08:23:52.693
73497
2021-01-22T11:42:01.313
2021-01-22T11:42:01.313
3060
43632
question
git
gitのsparse-checkoutにてリモートリポジトリから特定のフォルダ配下の中身だけ取得したい


おそらく`sparse-
checkout`できないと思います。`ghi`ディレクトリはもともとGitが管理しているディレクトリ構造であるため、それを変更すると変更履歴が生じます。  
また、`.git/info/sparse-checkout`に記述された内容はルートからのディレクトリ名などではなく、マッチするパターンになります。

`sparse-
checkout`の使い所はモノレポなどの単一かつ同一のGitリポジトリ内にある複数のディレクトリの内、必要なディレクトリだけを取ってきて作業するために使うので、ディレクトリ構造そのものを変更するような場合に向いていないでしょう。

単純にリモートのリポジトリから最新のディレクト/ファイルを取得したいだけであればsubmoduleなり、別の場所でsparse-
checkoutしてディレクトリ移動するなり、利用できるのであればgit-archiveを使うなりしたほうが良いと思います。

**コマンド参考例**

[code]

    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 # 変更履歴が出てくるはず
    
[/code]

## 参考

  * [CONE PATTERN SET](https://git-scm.com/docs/git-sparse-checkout#_cone_pattern_set)


CC BY-SA 4.0
2021-01-22T11:29:17.183
73499
2021-01-22T11:29:17.183
7997
73497
answer