【问题标题】:Performing a "fast-forward" merge with Rugged使用 Rugged 执行“快进”合并
【发布时间】:2014-11-22 01:05:28
【问题描述】:

使用 Rugged,执行快进“合并”的规范方法是什么?

来自here 我发现了一个可能的线索:

# 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

但我很好奇这里是否还有改进的余地。

【问题讨论】:

  • 在命令行上进行了一些实验后,我意识到上面示例中的 API 已经发生了变化,至少在 0.21 中是这样。但总体方法似乎没有改变。

标签: ruby libgit2 rugged


【解决方案1】:

不需要称为“快进合并”libgit2 的操作,因为所谓的 ff-merge 正在将当前分支更新为另一个分支上的任何提交,该提交确实存在。

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

将 workdir 更新为对方拥有的内容,然后将当前分支设置为指向分支顶端的任何提交以“合并”,这就是 ff 所做的。

【讨论】:

  • 谢谢卡洛斯,这似乎主要工作。 Couple cmets:没有提到这需要在被合并的分支上; #references 未记录;最后这会执行合并,但也会使索引处于脏状态(git status 显示文件暂存等待提交)。
  • 澄清一下,这实际上对我不起作用,因为它使索引处于奇怪的状态。
  • @Max 我遇到了同样的问题。几天前我基本上发布了same question。做了上述之后,除了清空索引,你找到合适的答案了吗?
  • @MichaelBoselowitz 您可能需要致电index.write,根据this 公开问题。
  • @Max 感谢您的回复。这确实帮助我生成了提交(我遇到的另一个问题)。但是,对于 ff 合并,事实证明您必须先 checkout_tree() 才能使用 set_target()。
猜你喜欢
  • 2019-09-11
  • 1970-01-01
  • 1970-01-01
  • 2020-06-21
  • 2015-04-21
  • 2011-08-19
  • 2018-07-05
  • 2017-03-03
  • 2020-12-25
相关资源
最近更新 更多