2016-07-21 96 views
2

有使用GitHub的庫項目。當有合併拉請求衝突的情況下一些值得關注的90%只是一個CHANGELOG文件完成的門票包含列表之前原來決心衝突,某事像:解決混帳衝突通過自動合併所有更改

## current 

<<<<<<< HEAD 
ISSUE-128 done some 128 
ISSUE-131 done some 131 
======= 
ISSUE-125 done some 125 
>>>>>>> ISSUE-125 
ISSUE-126 done some 126 
ISSUE-120 done some 126 
ISSUE-123 done some 126 

我不知道是否有自動的這種合併方式特定的文件(可能通過提供一些配置使用ie gitignore格式)與一個簡單的規則,只接受來自雙方的變化(至於它的順序,它的變化將是緊挨着對方,知道如何才能控制該命令是次要的但有趣的)。額外的規則可能是驗證每邊是否總是隻有一個加法,然後才進行自動合併。

理想的情況下將具有在GitHub這樣的配置還甚至當地git的解決方案將是有益的。

+0

你想在這裏通常被稱爲* union merge *,這實際上內置於Git中。它很少做正確的事情,但對於這種特殊情況,工會合並實際上可能是正確的。請參閱http://stackoverflow.com/q/13263902/1256452 – torek

+0

看起來像這正是我需要的,包括配置文件集的可能性。我會很高興,如果你寫一個:) – ciekawy

+0

接受的答案其實我還是莫名其妙地擔心的唯一的事情是,一個「更復雜」的衝突,我寧願看到有衝突與所有合併 – ciekawy

回答

1

[答案,從意見略作修改。]

你想要的這裏通常被稱爲工會合並,這實際上是建立在對Git的。它很少做正確的事情,但對於這種特殊情況,工會合並實際上是,可能是正確的。您可以使用.gitattributes爲特定文件名設置聯合合併。有關更多信息,請參閱git merge, keep both

其實我還是莫名其妙地擔心的唯一的事情是,一個「更復雜」的衝突,我寧願看到有衝突合併

右圖:與工會的主要問題合併,我認爲,它是總是成功,即使合併結果是荒謬的。你需要記住它是這樣設置的,並且要小心每次檢查合併結果。我個人更喜歡這個,如果Git把它拆分成一個可以在每個文件上調用的單獨的「解決」命令的話,我認爲git merge-file命令實際上大多是我們想要的東西,除了它是一個痛苦的使用。隨着更多可用的界面,而不是-X ours-s ours-X theirs等,並在.gitattributes的各個合併的驅動程序,我們可以只讓合併衝突發生,對其進行檢查,決定哪一方( S)保持如果足夠,並與去當然,如果一個走的更遠,在這條路上,一個具有GUI合併工具結束了...)

+0

你讓我想知道是否有可能定義自定義合併驅動程序,它可以在github上工作,這樣對於任何更復雜的情況都會失敗,因此github會顯示一條消息,指出有衝突需要解決而對於「簡單情況」,只會出現一個綠色按鈕,允許執行合併。我可能會嘗試編寫這樣的'.gitattributes'配置... – ciekawy

0

經常發生的問題。除了Changelog風格的文件之外,如果你有,例如源文件並添加新的東西,也會發生這種情況 - 大多數情況下,你添加新的方法或者某些規範的地方(比如接近文件末尾),並且在合併時每次都表現爲衝突。

簡短的回答:混帳不能幫助你在這裏,也不能用任何其他自動合併工具,短真實人工智能的。有其他地方提到的union驅動程序,但坦率地說,即使是Changelog文件,這對我來說也是非常危險的。您可以使用自定義合併驅動程序來了解您的更新日誌格式,但這種努力可能會使您忽略該想法(如果是這樣,那麼gitattributes聯機幫助頁面會爲您提供更多信息)。

側回答/提示:我取得了一些成功有我的源文件這樣的評論:

def lastmethodinclass 
    ... 
    end 

    ## placeholder 1 ## 

    ## placeholder 2 ## 

    ## placeholder 3 ## 

end # class 

然後,在第一分支,我把新方法背後的「佔位符1」。如果我後來記得,在另一個分支中,我已經「用完了」第一個佔位符,然後在第二個佔位符之後放置了我的下一個方法,依此類推。

這仍然是很尷尬的,但它的工作原理,以避免那些討厭的衝突。我經常清理舊合併後積聚的舊佔位符,並將它們歸併到它們所屬的位置。

與他人編碼時沒用,yup。