2016-07-12 6 views
0

最後のリリースからmasterブランチに対して行われたすべてのコミットを一覧表示する必要があります。私はpygit2を使ってこの機能を実装しなければなりません。しかし状況はここでは少し異なります。タグが他のブランチのコミットを指しているときに、最後のリリースからすべてのコミットを一覧表示する

masterブランチではtagを使用し、リリースはotherブランチになります。素朴なアプローチは、最後のtagged commitshaを見つけて、HEADからshaまで履歴を移動することです。しかし、このtagged commitは私のケースではmasterブランチに作られていません、otherブランチに作られています。コミットother枝に作られたと

$ git log sometag..HEAD --oneline 
ここ

sometagポイント:masterブランチ上で実行したときに興味深いことに、以下は正しい出力を提供します。だから、私はmasterブランチで行われたすべてのコミットのリストを持っていれば、これをプログラムで実装する方法を知りたいです。

tagged committimestampを見つけ、私のコミットリストをフィルタすることが、私の心に浮かぶ1つの解決策です。 git logはどうやってこれをやっていますか?

+0

タグ」上がりませんブランチに添付されていると、個々のコミットに添付されます。ダイアグラムはここで役立ちます。あなたは、特定のタグの先祖ではない現在のブランチの先祖であるコミットをリストしようとしていますか? –

+0

@DietrichEpp、ええ、私はそれを知っています。私はあなたが 'anscestors'ではなくtagの'先代 'を示唆していると思いますか? – darxtrix

+0

@DietrichEpp、大丈夫、わかりました。修正しました。 – darxtrix

答えて

1

私は、これはあなたを助けると思う:まず、我々は(イテレータをコミット)Walkerを取得するためにRepository.walk()を使用して、我々はすべてがsometagから到達可能なコミット除外する(Walker.hide()を)に変更します。

from pygit2 import Repository 
from pygit2 import GIT_SORT_TIME 

repo = Repository('.git') 
start = repo.revparse_single('refs/heads/master') 
release_tag = repo.revparse_single('refs/tags/sometag') 

walker = repo.walk(start.id, GIT_SORT_TIME) 
walker.hide(release_tag.id) 
for commit in walker: 
    print commit.message 
+0

ありがとうございます。 @Romanちょうど質問、 'walker.hide'はコミットIDではなくタグオブジェクトIDを受け入れますか? – darxtrix

+0

別のものこのウォーカーはどのように機能しますか?タグで指摘されたコミットは 'master'ブランチにはなく、ウォーカーはマスターブランチで作業していますか? – darxtrix

+0

@ankcodes私はあなたの最初の質問を理解していません。この歩行者はどのように機能するのですか?わかりません、私はドキュメントに書かれていることだけを知っています。最後の質問に答えは "はい"ですが、やはり私はその質問を完全に理解していません。このコードに実際に問題がありますか? – Roman

関連する問題