0

Grit を使用して Git リポジトリに書き込もうとしています。簡単にレポを作成してコミットできます。

repo = Repo.init_bare("grit.git")
index = Index.new(repo)
index.add('myfile.txt', 'This is the content')
index.commit('first commit')

最初のコミットを親として使用して、2 番目のコミットを簡単に作成することもできます。

index.add('myotherfile.txt', 'This is some other content')
index.commit("second commit", [repo.commits.first])

しかし、コミット履歴全体をトラバースせずに、これら 2 つのファイルのコンテンツを取得するにはどうすればよいでしょうか? リポジトリ内のファイルの現在の状態を取得するためのよりスマートな方法はありませんか?

4

1 に答える 1

1
(repo.tree / 'myfile.txt').data

具体的には、treeメソッド(任意のコミットを実行できますが、デフォルトではmasterになります)はTreeを返します。Treeには、渡すファイル名に応じてBlobまたはTreeを返す便利な/メソッドがあります。最後に、Blobには正確なデータを返すdataメソッドがあります。

編集:リポジトリ内のすべてのファイル名のリストが必要な場合(これはコストのかかる操作になる可能性があります)、1つの方法は次のとおりです。

all_files = repo.status.map { |stat_file| stat_file.path }

これは、すべてが追跡されていることを前提としています。よくわからない場合は、untracked属性でフィルタリングできます。

于 2011-03-13T04:32:04.327 に答える