2011年5月6日 星期五

Git 遠端備份

不知道大家都使用哪種 source version control,我自己本身常用 git, 雖然 git 功能強大,但我卻發現要找一個簡單的遠端備份方案還真不容易。熟悉 git 的人一定會問我為什麼需要遠端備份,是這樣的...

Git 所謂的分散式是在多人開發的情況下,如果你的成員分佈幅員廣大,理論上你不用再做備份了,即使你 local 遭遇像日本東北大地震那樣可怕的災難,只要還有別的地區的 member 電腦完好如初,一個 (或幾個) 簡單的 'git pull' command 就可以幫你恢復完整的 file/log/...

但考慮以下狀況:

  1. 開發者只有我一個人.. (孤單的獨立工作室負責人!?)
  2. 開發者有粉多人,但都集中於同一個(地理)區域

以上情況我們還是需要把所有資料備份到遠端去以策安全。

但事情好像也不是簡單的把整個 folder TAR 起來丟上網就可以.. 這樣做可能有幾個問題:

  1. 要用這包 TAR 在新的機器上復原需要做些奇怪的事(主要是因為 git 內含 local 的資訊)
  2. 在你 TAR 的同時如果有人在 check-in code, 會有資料不完整的問題。
搞了半天,我終於弄清楚要如何遠端備份 git 啦:

  1. 切到你的 git folder
  2. 'git bundle create BACKUP.BUNDLE --all'
那個 BACKUP.BUNDLE 可以隨你高興命名,把這個產生出來的檔案備份到遠端 (我自己習慣用google doc, 因為它本身也有版本控制的機制,萬一遠端檔案也有問題,至少還有舊版BACKUP.BUNDLE可用)

萬一你發生不幸的意外 (我是指你的電腦),重建步驟如下:

  1. 把你藏在遠端的備份檔案找出來放進新的電腦中
  2. 'git clone BACKUP.BUNDLE new-folder'
  3. 'cd new-folder'
  4. 'git fetch'
  5. 'git pull'
就這樣,你就可以 (在一片廢墟中) 繼續你的軟體開發工作啦 (假設還有供電的話:D)