4

この質問は、私の前の質問の進化または解決策です。gitリポジトリのクローンを作成する(詳細)この状況では、新しい質問を作成するのが最善だと思いますが、間違っている可能性があります。

これは単純です。libgit2git checkout masterと同等のことをどのように行うのでしょうか。

1年前には不可能だったようです:https ://github.com/libgit2/libgit2/issues/247 これによると、クローンは少なくとも5か月前に可能でした。しかし、私はそれを行う方法についてのコードドキュメント、またはを見たことがありません。(編集)つまり、含まれている完全なクローンgit checkoutについても、チェックアウトに関するコード/ドキュメントについても何も見ていません。

4

2 に答える 2

5

これによると、クローンは少なくとも5か月前に可能でした。しかし、私はそれを行う方法についてのコード、ドキュメント、または例を見たことがありません。

クローン操作は、基本的に4つのステップで構成されます。

  • 新しいリポジトリを初期化します
  • フェッチrefspecを使用してリモートを追加します
  • リモートからパックファイルをフェッチし、ローカル参照を更新します
  • HEADのコミットツリーからworkdirのコンテンツを更新します

libgit2の現在のバージョン(v0.17.0)では、最初の3つのステップを実行できます。

ソースコードにはいくつかのが含まれています。「fetch.c」もあります。

libgit2でgitcheckoutmasterと同等のことをするにはどうすればよいですか?

チェックアウトはまだ実装されていません。ただし、次のことはあなたが前進するのに役立つはずです。

  • git_reference_name_to_oid()masterブランチのOIDを取得します
  • git_commit_lookup()OIDからコミットを取得するには
  • git_commit_tree()コミットのツリーを取得するには
  • git_iterator_for_tree()ツリー(およびそのサブツリー)のすべてのリーフを再帰的に参照します

アップデート

クローン機能は、libgit2リポジトリにマージされました。

プルリクエストの一部として、作成者はユーザーにチェックアウトの実装も提供するように注意しました。

于 2012-05-30T19:02:45.567 に答える
3

HEADシンボリックを作成してから、次のように頭にチェックアウトできます。

git_reference_create_symbolic(&head, repo, GIT_HEAD_FILE, branchname, 1);
git_checkout_head(repo, opts, stat);
于 2012-11-26T15:04:41.873 に答える