這個方法非常簡單,就是把電腦中以 git 進行版本控制的專案資料夾,透過其遠端協作的方式同步到雲端。這時原始碼是放在電腦的某個資料夾,而雲端資料夾(如 Dropbox)則放著單純的 git 版本記錄。
因為 git 的中文用詞太雜了,在更深入介紹之前先做些名詞性的解釋。所謂「以 git 進行版本控制的專案資料夾」指的是執行 git init 或 git clone 的那個資料夾,包含所有的原始碼與 .git
資料夾。git 的版本記錄則存放在 .git
中。作業系統通常預設 .git
是隱藏的。所謂「單純的 git 版本記錄」指的是 server 或 remote 端的 *.git
這個資料夾,最初是以 git init –bare 來創建,再透過 git push 或 git pull 來同步。為了方便說明,這邊把專案資料夾叫 local,server 上的則叫 remote。
回到正題。這個方法中存在兩個同步機制:第一個是 local 跟 remote 之間的同步,它完全由使用者透過 git push 或 git pull 來決定;第二個是雲端資料夾的同步,以 Dropbox 來說,它會自動上傳更動過的檔案與資料夾。
相較於直接將 git 專案資料夾丟進雲端資料夾中,這個方法的好處是高效率地網路頻寬的控制。像 Dropbox 會不斷地監控電腦中 ~/Dropbox
這個目錄,在專案發展過程中每一次的存檔,即使只加了一個字母,Dropbox 也會動員整個同步機制,確保相同帳戶底下每一台電腦的檔案的一致性。一旦將專案分開,只有 git commit 過且經過 git push 的更動才會被 Dropbox 同步。這個可以稱為「資源型備份」。
雲端服務並非設計來同步 git 版本記錄的,也就是說雲端服務無法百分之百的保證 git 版本記錄的同步。將專案資料夾放到雲端資料夾中,同時也把全部的版本記錄暴露在這樣的風險中,一旦發生同步不全的情況,相同帳號底下的每一個同步的專案資料夾都會遭殃。這個現象可以稱為「異地破壞」。雲端資料夾非預期性的同步了在另一處被更改的檔案也是相同的現象。
將專案分開,至少可以避免「異地破壞」的發生,達成了「非異地破壞」。如果想要更全面的保障,也可以裝上如 git-remote-dropbox 的工具確保單純的 git 版本記錄同步的完整性。
將專案分開後,除了上面提到的「資源型備份」與「非異地破壞」,它可以直接延用 git remote 的所有便利功能。使用者可以在工作電腦與家中的電腦之間進行 git push/pull 工作流。透過雲端服務資料夾分享的功能,使用者也可以輕鬆地進行協作。
以下附上簡易的實作範例。
假設專案資料夾為 my_proj/
,使用的雲端服務為 Dropbox。
在創建對應的 remote 資料夾前,先手動在 Dropbox 下新增一個 git
資料夾,存放所有的 git remote 版本記錄。新增一個 remote:
$ cd ~/Dropbox/git $ git init --bare my_proj.git
Remote 的 git 資料夾通常會用專案名稱 + .git 的命名方式,例如上面的 my_proj.git
。
之後便回到專案目錄中,新增一個 git remote,名叫 db(「D」rop「B」ox):
$ cd path_to_my_proj $ git remote add db ~/Dropbox/git/my_proj.git
Remote 的名稱也可以用較常用的「origin」,上面這個例子假設 origin 留給了 github。之後就能把同步 git 專案中的不同分支了(下面是用 dev 為例):
$ git push -u db dev
回到家裡打開另一台電腦時,在 Dropbox 同步完成後,如法炮製新增一個 git remote,之後就可以將最新的內容同步下來:
$ git pull db dev
以上是一個簡單的 git 上雲端的同步方法,很適合個人或小團隊作業。基本只要是電腦可以辨識的路徑,都可以新增為 git remote。
最後祝大家都能找到適合自己的 git 雲端同步策略。
發表迴響