我們是一羣開發人員,他們從SVN切換到Git,認爲它會更簡單,更標準。不幸的是,直到現在我們只遇到了失敗和問題。Git合併不便
我們不需要功能分支。我們有一個名爲「開發」的分支,所有開發人員都共享。
我們習慣了TortoiseSVN,所以我們決定和TortoiseGit一起爲UI做準備。
提交和推送很好。拉操作出現問題。 SVN很棒,即使在本地更改下載了新版本,自動合併了可能的內容並要求解決衝突的文件。在Git下,如果你使用相同的文件進行本地修改,那麼就停在那裏(即使它可以自動合併)。你有兩個選擇,要麼提交你本地的修改(即使你的工作已經完成了一半),這些修改會污染「顯示日誌」窗口,其中包含大量無用的提交,或者存儲,拉取,彈出存儲,這些操作與SVN所做的操作類似一些無用的步驟。有更好的方法嗎?
隱藏彈出操作嘗試自動合併(很好),但在真正的衝突事情變壞。在SVN下很容易,你有一個新的文件,另一邊的本地文件在差異視圖的另一邊,只是固定你的本地並保存它並標記爲解決。在Git下,你有四個文件,「正常」文件,BASE文件,REMOTE文件和LOCAL文件。一個完全混淆的事情是,「遠程」文件(他們的)實際上是包含你所做更改的隱藏文件,所以它不能幫助清晰。
因此,您選擇打開合併工具的「編輯衝突」菜單選項。 TortoiseGitMerge界面不太友好,KDiff3在網上被廣泛使用,所以我們決定使用它。所以你按合併按鈕創建一個「合併」選項卡,並在衝突線上,你可以按A,B,C按鈕。到現在爲止,沒關係。問題是,當你保存這個結果文件時,它會保存在file.cs.LOCAL.cs下(而不是file.cs?)。然後,在TortoiseGit下,無論您選擇「已解決」,「解決使用我的問題」或「使用他們的解決方案」,它只是刪除您的合併文件,併爲您提供最終文件的錯誤版本(未完成合並工作)。我們設法得到它的唯一方法是對合並文件進行臨時備份,標記爲已解決並重新備份備份。我勒個去?在我們的工作流程中,我們做錯了什麼?
聽起來像你使用Git太像SVN而不是Git,並沒有利用Git在本地提交更改並在與其他開發人員共享這些更改之前重寫本地歷史記錄的能力。另外,你能不能分開你的最後一段,這太大了,不容易消化。 – 2014-03-13 19:00:51
除非使用'pull --rebase'(即在遠程更改之前添加我的更改),否則在執行(本地)更改時拉(在新的遠程更改中)是沒有意義的。每個開發者*可以*擁有儘可能多的本地分支,並且只將它們合併到主要的分支中進行發佈。也許尋找有效使用git的工作流的建議,就像[atlassian](https://www.atlassian.com/git/workflows)中的那些建議一樣。 – vonbrand
感謝紙杯蛋糕的回覆。你正在談論推動之前多次提交?我們可以做到這一點,並且工作得很好(即使我想不出爲什麼我會這麼做)。正如我所提到的,問題出在Pull上。按照建議拆分我的最後一段。 vonbrad:rebase看起來很有趣,除了邏輯上你會想在本地增加遠程更改,而不是相反。你爲什麼說這不合乎邏輯?我正在開發一項功能,其他人正在更新應用程序的其餘部分,我希望在處理我的功能時看到其更改處於活動狀態。 – Dunge