2017-08-21 9 views
0

特定のブランチで特定のコミットでファイルの内容を読みたいと思っています。現在、このコードを使用してブランチを無視してコミットするJGit:ブランチ内のコミット時にファイルの内容を読み込みます。

私の目標は、特定のブランチで実行される特定のコミットでファイルの内容を取得することです。

+0

あなたの質問を明確にしてください。スニペットの期待される結果は何ですか?実際の結果は何ですか? –

+0

質問が更新されました –

+0

通常、コミットはブランチ上に作成されますが、その事実の後にコミットが「ブランチで完了しました」とは言えません。その後、ブランチを追加、削除、名前変更、または更新することができます。あなたが知ることができるのは、与えられたコミットが与えられた時間に1つ以上のブランチから到達可能であることだけです。 'NameRevCommand'は、コミットが到達できるすべてのブランチをリストします。 –

答えて

1

ほとんどの古いVCSツールブランチとは異なり、Gitのブランチは、これらのコミットの1つに対する軽量の可動ポインタです。コミット自体は「包含」されません。言い換えれば、それはそれが指しているコミットの40文字のSHA-1チェックサムを含む単なるファイルです。コミット通常、枝の上に作成されている間、リュディガーヘルマンで述べたように

A branch and its commit history

、あなたは事実の後「ブランチで行われた」コミットと言うことはできません:Git - Branches in a Nutshellで非常に説明のための例もあります。ブランチは後で追加、削除、名前変更、または更新することができます。たとえば、ブランチまたはタグv1.0が削除されても、コミット98ca934ac2f30abはまだ存在し、masterによって到達可能です。私はあなたが詳細についてはPro Git (2nd Edition), Chapter 3.1 Git - Branches in a Nutshellを読むことをお勧めします。 JGitについては

は、ここで特定のパスを読んでの私の実装はコミットです:

private String getContent(RevCommit commit, String path) throws IOException { 
    try (TreeWalk treeWalk = TreeWalk.forPath(git.getRepository(), path, commit.getTree())) { 
    ObjectId blobId = treeWalk.getObjectId(0); 
    try (ObjectReader objectReader = repo.newObjectReader()) { 
     ObjectLoader objectLoader = objectReader.open(blobId); 
     byte[] bytes = objectLoader.getBytes(); 
     return new String(bytes, StandardCharsets.UTF_8); 
    } 
    } 
} 
関連する問題