Выполнение быстрого слияния с Rugged

Какой канонический способ выполнить «объединение» с ускоренной перемоткой вперед с помощью Rugged?

Из здесь я нашел один возможный привести:

# Move branch forward
# Since there's no fast-forward merge in this lib yet, do it by hand.
br = repo.branch "master"
br.move 'master-old', true if br != nil
repo.create_branch 'master', commit_sha
#br.delete! # No real harm in this hanging around

Но мне любопытно, есть ли здесь возможности для улучшения.


person Max    schedule 22.11.2014    source источник
comment
Немного поэкспериментировав с командной строкой, я понял, что API-интерфейсы в приведенном выше примере изменились, по крайней мере, в версии 0.21. Но общий подход, похоже, не изменился.   -  person Max    schedule 22.11.2014


Ответы (1)


Нет необходимости в операции, называемой «ускоренное слияние» libgit2, поскольку так называемое ff-слияние обновляет текущую ветку до любой фиксации в другой ветке, которая существует.

repo.checkout_tree(other_branch.target)
repo.references.update(repo.head.resolve, other_branch.target_id)

обновит рабочий каталог до того, что есть на другой стороне, а затем установит текущую ветку так, чтобы она указывала на любую фиксацию на кончике ветки для «слияния», что и делает ff.

person Carlos Martín Nieto    schedule 22.11.2014
comment
Спасибо, Карлос, кажется, это в основном работает. Пара комментариев: не упоминалось, что это требует присутствия в объединяемой ветке; #references недокументирован; и, наконец, это выполняет слияние, но также оставляет индекс в грязном состоянии (статус git показывает файлы, подготовленные для фиксации). - person Max; 22.11.2014
comment
Чтобы уточнить, это на самом деле не работает для меня, так как оставляет индекс в странном состоянии. - person Max; 01.12.2014
comment
@Max, у меня такая же проблема. По сути, я опубликовал тот же вопрос пару дней назад. Вы нашли подходящий ответ, кроме очистки индекса после выполнения вышеуказанного? - person Michael Boselowitz; 05.01.2015
comment
@MichaelBoselowitz Вам, вероятно, нужно позвонить index.write по этой открытой проблеме. - person Max; 06.01.2015
comment
@Max спасибо за ответ. Это действительно помогло мне с созданием фиксации (еще одна проблема, с которой я столкнулся). Однако для слияния ff оказалось, что нужно checkout_tree() перед использованием set_target(). - person Michael Boselowitz; 06.01.2015
comment
@MichaelBoselowitz, это имеет смысл ... Я думаю, что это тоже было включено в пример Карлоса, поэтому я не упомянул об этом;) - person Max; 06.01.2015
comment
@Макс действительно! Глупая ошибка мясного пространства. Наткнулся на этот ответ после долгих проб и ошибок. Сначала я отклонил это, потому что это было то, что у меня уже было, но не по порядку! - person Michael Boselowitz; 06.01.2015
comment
@CarlosMartinNieto это не совсем то, что такое ff-слияние. Я собираюсь сократить терминологию здесь, но это также подтверждает, что ваше текущее дерево является поддеревом дерева, к которому вы выполняете быструю перемотку вперед, то есть что ваша цель содержит текущую фиксацию и всех ее предков. Так что на самом деле это будет немного больше работы, чем то, что предлагает ваш ответ, чтобы обеспечить возможность ff-слияния. - person Max; 20.01.2015