SVN 記錄版本之間的差異
上述圖片中 : 橫向表示各個版本號, 縱向表示各個檔案和其差異。在version1中, 存在三個檔案各自是fileA, fileB, fileC; 在version2中, fileA, fileC發生變化A1,那我們就進行變化A1進行記錄; 在version3中, fileC發生變化A2, 那麼我們就將變化A2進行記錄, 以此類推!
Git 直接記錄快照
上述圖片中: 橫向表示各個版本號,縱向表示各個快照(所謂快照,即其所表示檔案的一個副本或一個複製品)。在version1中,存在三個快照各自是A、B、C;在version2中,A、C發生了變化,那麼我們就對A、C做一個快照A1、C1,而B沒有不論什麼變化,那麼就不再做快照而僅僅是做一個上次的快照做一個連結B;以此類推。
Git資料完整性
Git一般只新增資料。 Git 中所有資料在儲存前都計算校驗和。
流程原理圖
將遠端倉庫程式碼更新到本地
pull, fetch 和merge區別
本地工作區跟遠端倉庫衝突 (pull, fetch)
- 放棄本地修改 ( 本地倉庫覆蓋工作區 ) [ git checkout head . ]
原理如下: - 原生程式碼放在暫存區, 遠端拉取, 再從暫存區取出程式碼。( 手工解決衝突 )
原理如下:
分支流程
-
假設你正在你的專案上工作,並且已經有一些提交。
-
你已經決定要解決的公司新的問題 #53,並建立一個分支
-
你繼續在 #53 問題上工作,並且做了一些提交
-
現在你接到那個電話,有個緊急問題等待你來解決 (你切回到主分支。並建立 hotfix 分支)
-
緊急問題解決了。你打算合併分支
-
你繼續切換到問題 #53 並做個提交
-
問題 #53 解決了,你打算合併分支
遠端拉取流程
- 遠端倉庫,並且有一些提交記錄 。拉取下來
- 其他人提交了一些修改至遠端倉庫
- 你在本地分支上繼續開發
- 你進行拉取你本地沒有的資料
變基合併
- 建立了一個特性分支 server,為服務端新增了一些功能,提交了 C3 和 C4。 然後從 C3 上建立了特性分支 client,為客戶端新增了一些功能,提交了 C8 和 C9。 最後,你回到 server 分支,又提交了 C10。
- 假設你希望將 client 中的修改合併到主分支併發布,但暫時並不想合併 server 中的修改
$ git rebase --onto master server client
-
進行合併 client 分支
$ git checkout master $ git merge client
-
進行合併 server 分支
$ git rebase master server
本作品採用《CC 協議》,轉載必須註明作者和本文連結