1

裸のリポジトリがあり、そこにファイルを追加、編集、および削除したい場合、LibGit2Sharp を使用してこれを行うにはどうすればよいですか?

各コミットには、TreeEntry オブジェクトを含む Tree オブジェクトがあることがわかります。これらの TreeEntry を追加、編集、削除することはできますか? もしそうなら、インデックスは、これらの変更が保留中であり、ステージングする必要があることを反映していますか?

ありがとう!

4

2 に答える 2

1

裸のリポジトリがあり、そこにファイルを追加、編集、および削除したい場合、LibGit2Sharp を使用してこれを行うにはどうすればよいですか?

ベア リポジトリは、変更をフェッチ/プルし、更新をプッシュする "サーバー側" リポジトリです。

Working Directoryも もありませんIndex。したがって、ファイルを直接追加、編集、または削除することはできません。「標準」リポジトリ (作業フォルダーを含む) でコミットを準備してから、コミットを「ベア」中央リポジトリにプッシュすることになっています。

注:一部のgit 配管コマンドlibgit2 の低レベル関数を使用すると、これらの制限を回避できます。ただし、これはやや高度なツールキットであり、Git の内部に飛び込んで道を見つける準備ができている必要があります:) LibGit2Sharp はこれらの機能を公開していません。

各コミットには、TreeEntry オブジェクトを含む Tree オブジェクトがあることがわかります。これらの TreeEntry を追加、編集、削除することはできますか? もしそうなら、インデックスは、これらの変更が保留中であり、ステージングする必要があることを反映していますか?

A Commit、 aTreeまたは aBlobは読み取り専用の git オブジェクトです。を に「追加」したり、既存の を変更したりすることはできTreeEntryませTreeCommit

git commit 修飾子 ( --amend ) は、コミットがその場で更新されたという印象を与えることができます。これは当てはまりません: 完全に新しいコミットは、古いコミットの親の子として再作成されます。次に、HEAD古いコミットから新しいコミットに移動します。

アップデート

LibGit2Sharp のリリースv0.9.0では、いくつかの低レベルの操作が公開されており、リポジトリのオブジェクト データベースと直接やり取りできるようになりました。

これらの機能を活用すると、インデックスや作業ディレクトリを使用せずに、ブロブ、ツリー、およびコミットを作成できます。

したがって、既存のツリーをロードし、メモリ内で更新してから、オブジェクト データベースに永続化することが可能になりました。もちろん、これにより新しいツリーが作成され、前のツリーは変更されずに保持されます。

これらの機能を示すいくつかの単体テストは、ObjectDatabaseFixture.csファイルにあります。

于 2012-01-30T20:24:15.633 に答える
0

DAG (有向非巡回グラフ) を理解するには、「コンピューター サイエンティストのための git」をググってください。コミット、ツリー、またはオブジェクトを変更すると、実際には新しいものが作成されます。これらのいずれかを編集するという考えは、間違った考え方です。コンテンツが変更された場合にのみ、新しいものを作成できます。

于 2012-01-30T20:25:53.123 に答える