1

TLDR

パッケージのドキュメントと公式のを精査してきましたが、go-git を使用してサブモジュールを追加する方法を説明する方法がわかりません。git submodule add <url> <submod_name>スパースチェックアウト用に構成するだけでなく、しようとしています

ゴール

golangのgo-gitパッケージを使って以下のリストを変換したいです。私の全体的な目標は、Repo-A からのサブモジュールをまばらにチェックアウトすることです。その後、全体的なレポは Repo-B 用になります。Repo-A からコンテンツを調達し、いくつかの編集を行い、再編成してから、結果を Repo-B にプッシュしようとしています。以下に含めたのは最初のステップ、特にこのレポ + サブモッドを最初から構成する方法です。

git init
git remote add -f <remote_name> <repo_url>
git clone --depth=1 --no-checkout <submod_repo_url> <submod_name>
git submodule add <submod_repo_url> <submod_name>

  • これを呼び出す方法がわかりません.gitディレクトリを直接編集することで可能かもしれないと思っていますが、それは面倒です。説明や提案をいただければ幸いです。

git submodule absorbgitdirs

  • これが必要かどうかはわかりませんが、それが何をするのかについての適切な説明を見つけることができませんでしたが、どちらの方法でも問題を引き起こさないようですか?

git -C pinkbrain config core.sparseCheckout true(注: サブモジュールにのみ適用されます)

  • .git構成であるため、これを機能させる方法がわかりませんが、サブモジュールのみです。新しい git.PlainOpen() オブジェクトを作成し、その作業ツリーにアクセスするだけでしょうか?

echo "cir-1" >>.git/modules/<submod_name>/info/sparse-checkout
echo "cir-2" >>.git/modules/<submod_name>/info/sparse-checkout
git submodule update --force --checkout <submod_name>

  • これには 2 つの別々の呼び出しが必要かどうかわかりませんか? Worktree.Pull()& Worktree.Pull()、以下のコードを参照してください。

git pull <remote_name> main
git add .
git commit -S -m "commit example message"

私の質問

  1. go-git を使用してサブモジュールを追加するにはどうすればよいですか?
  2. 別途sw.Checkout(&git.CheckoutOptionsビットは必要ですか?もしそうなら、どのような順序でそれらを行うべきですか?
  3. メインリポジトリまたはサブモジュールでスパースチェックアウトを構成するにはどうすればよいですか?
  4. について何か考えはありgit submodule absorbgitdirsますか?それが何であるかについての情報をいただければ幸いです

私がこれまでに得たもの(要約)

:もっとありますが、私の質問とは関係
ありませgo-git--checkoutgit.PullOptions()

// Should be equivalent to : git submodule update --force --checkout <submod_name>
// Get the repo object (could be git.plainOpen() too)
r, err := git.PlainClone(directory, false, &git.CloneOptions{
    <options>
})

// Get the Submodule WorkTree object
w, err := r.Worktree()
sub, err := w.Submodule(submodule)
sr, err := sub.Init()
sw, err := sr.Worktree()

// Get the Update the Submodule
err = sw.Pull(&git.PullOptions{
    <options>
}

// Checkout the submodule, Not sure if this is the right order?
err = sw.Checkout(&git.CheckoutOptions{
    <options>
}
4

1 に答える 1