git merge 原理 ,wiz 等雲同步原理


idea中. 左邊是 本地,中間是合並結果. (紅色代表沖突) 右邊是merge過來的.

opendiff中  <--- 剪頭指向誰.代表使用誰. 紅色代表沖突. 結果再最小面.


雲同步普通更新:

如果每次更新都保存完整的文件快照. 那么會冗余存儲太多數據. 如果只保存diff, 那么一旦很多次更新后,要計算N次更新后的文本,就要通過原始文件一次次diff更改過來.

計算量過大. 故需要100次diff后保存一個快照文件.

在說merge 沖突后:

 git merge后,一個commitId會有兩個父親. 導致 diff會有兩份(或者實現為一份快照,丟失diff.)


merge時,

1.當前的HEAD 就是 merge 來源分支的源 .那么就叫fast forwd (Git詳解之三 Git分支 含圖片 http://www.open-open.com/lib/view/open1328069889514.html )

2. 沖突時,三方對比. 但是ui工具里都不會把共同的源展現出來.

    首先把得到共同源的所有文件快照(計算得出),local和 merge來源分支的快照. 然后各自和源進行diff ( 妙: 不需要把n次的commitId diff進行合並. 有可能負負得正,直接把最終結果拿去diff就好了. 這個diff肯定是N個diff的總和.). 看看是否有對同一行的變更.如果是那么就產生沖突了.


merge沖突亂解決后擦屁股方案:

      還是通過commitId 新建新分支. git checkout  -b "newBranchName" commitId .

      把merge的兩個父親源一起checkout出來. 然后本地進行merge .然后和已經提交的merge版本號文件進行比較.




注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2020 ITdaan.com