2012-06-25 32 views
1

我試圖評估如果從svn移動到git將是一個可行的選擇。我聽說git中的合併比svn中的合併好得多,但在測試中我沒有看到。評估git和合並似乎沒有按照我預期的方式

這裏是我做了什麼:

  • 創建一個名爲main.c中

    #include <stdio.h>  
    
    function main() { 
        int myNum = 10; 
    
        printf("Hi, my num is %d\n", myNum); 
    
        return 0; 
    } 
    
  • git的初始化,git的添加,git的承諾-m 「的main.c」。 ,並推到原點主

  • main.c文件中,我故意不遵守編碼標準和正確命名的功能。
  • 另一個用戶來臨時,改變代碼粘附到一個編碼標準(捲曲桁移動到下一行)款,並推動

    #include <stdio.h>  
    
    function main() 
    { //This was changed to a specific coding standard 
        int myNum = 10; 
    
        printf("Hi, my num is %d\n", myNum); 
    
        return 0; 
    } 
    
  • 我以前主要添加函數,提交和努力推動,它告訴我,我的主分支是不是最新的,所以我做的git拉出身主人把它最新的,然後我得到的衝突

    <<<<<<< HEAD 
    function main() { 
        int myNum = 10; 
    ======= 
    function main() 
    { 
        int myNum = 10; 
    >>>>>>> f0aceffb16f0a24638493367f4be6f2a09e22a82 
    

問題:有人可以告訴我,如果我做錯了嗎?是否有某些步驟讓我離開,從而導致自己的悲傷?也許我真的不明白合併應該比svn簡單嗎?

感謝您抽出寶貴時間,
克里斯

+1

Just因爲合併更簡單並不意味着你永遠不會有衝突。衝突是不可避免的。 –

+0

你有沒有在推動過後更改了'function main(){'這一行? – CharlesB

+0

@JBNizet非常真實。我期待衝突,但這似乎很容易不會自動合併? –

回答

1

的Git無法猜測你想要什麼,當你做出如下修改到同一線(S)。沒有SCM可以做到這一點。一個人必須告訴它什麼版本應該「贏」。

有一些角落情況下,git的合併不是顛覆更乾淨。我面前沒有他們,但坦率地說,在現代顛覆的情況下,合併不會有實質性的差異。

您對是否要使用git不會回落到一些合併黑魔法的決定。這將歸結爲git如何運作整體。

對於我來說,有什麼其他SCM的分離Git是如何工作的。因爲它使用了一個加法模型(新的提交是圖形的增加)並且每個提交都是散列的,所以使用git很難失去任何東西。這種複雜的合併變得糟糕,並導致一個邪惡的混亂,你不知道你將如何倒回?在合併之前提交git reset --hard。將你的分支重置爲11次提交,稍後再決定應該提交10次提交?沒問題,只需將分支移回第10個提交。決定你的最新功能分支應該是基於開發而不是主人?只需幾條命令即可進行更改。

Git的不可改變的性質和內容的散列給我的東西我從來沒有與SVN。置信度。自信如果我把事情搞砸了,我可以想出辦法回到我所在的位置。充滿信心,我可以檢查我的變化,並確保他們在與他人分享之前是正確的。我不會感到恐慌:「哦,不......我剛剛對每個人做了什麼?「

此外,雖然它不是我經常使用,能夠直接拉動從其他開發商的變化,甚至申請通過電子郵件發送補丁文件對我來說是很好的靈活性。

+0

感謝您的信息。合併不會成爲決定的最終結果;只是當我正在做一些研究爲什麼選擇git over svn的時候我很好奇。 我很欣賞誠實地告訴我,合併時不一定會有任何實質性差異。 –

1

你既改變了接近行, Git在合併這樣的接近區域時比較謹慎,但是如果在完全不同的區域進行了更改,那麼合併將會很順利。

某些合併工具(如kdiff3)會自動解決此合併問題,並且大部分時間,但我相信Git不希望冒險合併自動解決。

相關問題