2014-11-22 39 views
2

使用Rugged,執行快進「合併」的規範方法是什麼?使用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 

不過我很好奇,如果這裏有改進的餘地。

+0

在命令行稍微做了一點試驗之後,我意識到上例中的API已經發生了變化,至少在0.21。但總體方法似乎沒有改變。 – Max 2014-11-22 01:09:18

回答

1

由於所謂的ff-merge將當前分支更新爲另一分支上的任何提交(不存在),因此不需要稱爲「快進合併」libgit2的操作。

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

將更新工作目錄的什麼對方有,然後將當前分支指向任何提交在分支的末端,以「合併」,這是一個FF做什麼。

+0

感謝卡洛斯,這似乎主要工作。夫婦的評論:沒有提到這需要被合併的分支上; #references沒有記錄;最後這將執行合併,但也會使索引處於骯髒狀態(git status顯示提交文件的階段)。 – Max 2014-11-22 19:16:18

+0

爲了澄清,這實際上並不適用於我,因爲它使索引處於奇怪的狀態。 – Max 2014-12-01 18:41:06

+0

@Max我遇到了同樣的問題。幾天前我發佈了基本上[相同的問題](http://stackoverflow.com/questions/27749418/implementing-pull-with-pygit2)。做完上述之後,除了清除指數之外,您是否找到了合適的答案? – 2015-01-05 16:33:41