3

このlibgit2sharp の問題のコメント間の議論で、オブジェクト データベースに対してコミットを作成できることが強調されました。

オブジェクト データベースへのコミットとは何ですか?

通常の git add と git commit よりも有利なのはなぜですか?

別のソース管理システム SourceGear からコミット履歴を Git にインポートしようとしています。現時点では、私のロジックは単純に他のソース管理システムのファイルをループし、特定のバージョンとそのコミット情報を取得して、repo.Index.Stageand を実行しrepo.Commitます。それは正しいと思いますが、オブジェクト データベースを使用する必要がありますか?

4

1 に答える 1

4

LibGit2Sharp に対して作業する場合、コミットする標準的な方法は、実際には次のワークフローです。

using (var repo = new Repository("path/to/a/repository"))
{
    // do stuff

    repo.Index.Stage("path/to/file1");
    repo.Index.Stage("path/to/file2");

    repo.Commit("This is my commit", ....);

    // more stuff
}

ただし、これには裸ではないリポジトリ (作業ディレクトリindexを持つリポジトリ) が必要です。

このStage()呼び出しにより、ファイルが作業ディレクトリからindexに登録されます。このCommit()呼び出しにより、インデックスのコンテンツの不変のタイムスタンプ付きスナップショットがオブジェクト データベースに作成されます。

バージョン v0.9 以降、LibGit2Sharp では、Stage()何も要求することなく、コミットをオブジェクト データベースに直接作成できます。実際、これは裸のリポジトリに対しても機能します。

コミットのほかに、新しいObjectDatabaseAPIを使用して、BlobsまたはTrees. ObjectDatabaseFixture単体テストで使用可能なサンプルをいくつか見つけることができます。

obect データベースへのコミットとは何ですか?

実際、コミットは常にオブジェクト データベースに保存されます。新しい API は、一部の高度なスクリプト操作で役立つ可能性があるいくつかの下位レベルの操作を公開します。

通常の git add と git commit よりも有利なのはなぜですか?

うわー...これは幅広いサブ質問です。そして、答えのリストは有限ではありません;-)私の頭のてっぺんから、いくつかの潜在的な答えがあります:

  • これにより、コミットとは無関係にブロブやツリーを直接作成できます
  • 標準working directory -> index -> odbワークフローを使用すると、一度に 1 つのコミットしか準備できません。この API を使用すると、ブロブとツリーを非順次フローで作成し、コミットに関連付けるツリーを最新の時点で決定できます。
  • この API を使用すると、作成するコミットが持つべき親を明示的に選択することもできます
  • Git は、不変で追加専用のオブジェクト データベースであるコンテンツ アドレス指定可能なファイル システムです。この API は、標準のソース管理以外の使用法を容易にします。

現時点では、私のロジックは単純に他のソース管理システムのファイルをループし、特定のバージョンとそのコミット情報を取得し、repo.Index.Stage を実行してから repo.Commit を実行します。それは正しいと思いますが、オブジェクト データベースを使用する必要がありますか?

ユースケースを考えると、標準のワークフローで十分のようです。

于 2012-05-24T10:43:33.247 に答える