2016-07-12 3 views
0

Мне нужно перечислить все фиксации, сделанные в ветке master, начиная с моей последней версии. Я должен реализовать эту функцию, используя pygit2. Но ситуация здесь немного другая.Список всех коммитов с момента последнего выпуска, когда тег указывает на фиксацию на другой ветке

Освобождение производится на ветке master с использованием tag на фиксации до other. Наивный подход состоял бы в том, чтобы найти sha последних tagged commit и переместить историю с HEAD до этого sha. Но это tagged commit не сделано для филиала master в моем случае, оно сделано для other ветви. Интересно, что следующее дает правильный выход, когда пробегают master отрасли:

$ git log sometag..HEAD --oneline 

Здесь sometag указывает на коммит сделал на other отрасли. Итак, я хочу знать, как реализовать это программно, если у меня есть список всех коммитов, сделанных на ветке master.

Одно из решений, которое приходит мне в голову, состоит в том, чтобы найти timestamp из tagged commit и фильтровать мой список фиксаций. Как это делает git log, любые идеи?

+0

Теги Арен» t, прикрепленные к филиалам, они привязаны к отдельным фиксациям. Диаграмма поможет здесь. Вы пытаетесь перечислить коммиты, которые являются предками вашей текущей ветви, которые не являются предками определенного тега? –

+0

@ DietrichEpp, да, я знаю это. Думаю, вы предлагаете «предшественники» данного тега, а не «anscestors»? – darxtrix

+0

@ DietrichEpp, ладно, я понял, что это. Починил это. – darxtrix

ответ

1

Я думаю, что это поможет вам: во-первых, мы используем Repository.walk(), чтобы получить Walker (совершить итератор), а затем изменить его (Walker.hide()), чтобы исключить все совершает достижима из sometag:

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', принимающий идентификатор объекта тега, а не идентификатор фиксации? – darxtrix

+0

другой предмет как работает этот ходунок? Конец, отмеченный тегом, находится не на ветке 'master', и ходок работает над главной ветвью? – darxtrix

+0

@ankcodes Я не понимаю ваш первый вопрос. Как работает этот ходунок - я не знаю, я знаю только то, что написано в документации. К последнему вопросу ответ «да», но опять же, я не совсем понимаю вопрос. У вас есть настоящая проблема с этим кодом? – Roman

Смежные вопросы