← 上一章:使用 GitHub 免費製作個人網站 下一章:Git Flow 是什麼?為什麼需要這種東西? →


【冷知識】一定要有 GitHub 才能得到別人更新的檔案嗎?

大部份人的觀念,檔案如果沒有上傳到 GitHub,其它人是要怎麼更新?難道是要用 Email 寄來寄去嗎?

嗯,你猜對了,雖然現在有 GitHub 很方便沒錯,只要 Push、Pull 幾個簡單的指令檔案就同步,但在以前的時候的確就是用 Email 來寄送更新檔案。

製作更新檔

來試一下怎麼製作所謂的「更新檔(Patch)」。假設目前的歷史紀錄是這樣:

$ git log --oneline
fd7cd38 (HEAD -> master, origin/master, origin/HEAD) Update about.html
2eb8fea add readme
953cbd9 update info page
15202a1 add info page
b8ac91f add contact page
9a0233e add about page
1bbf412 update index.html
59dbbc9 init commit

然後我先很快的做了 2 次 Commit,所以現在歷史變這樣:

$ git log --oneline
6e6ed76 (HEAD -> master) add product page
6aba968 update info.html
fd7cd38 (origin/master, origin/HEAD) Update about.html
2eb8fea add readme
953cbd9 update info page
15202a1 add info page
b8ac91f add contact page
9a0233e add about page
1bbf412 update index.html
59dbbc9 init commit

接下來,我使用 git format-patch 指令來產生幾個更新檔

$ git format-patch fd7cd38..6e6ed76
0001-update-info.html.patch
0002-add-product-page.patch

後面的參數 fd7cd38..6e6ed76 表示會產生從 fd7cd38 這個 Commit 之後(不包括本身),直到 6e6ed76 這個 Commit 為止的更新檔。如果是這樣:

$ git format-patch -2
0001-update-info.html.patch
0002-add-product-page.patch

後面那個 -2 表示「請幫我產生最新的兩次 Commit」的更新檔。因為這個指令會直接在當下目錄產生 Patch 檔,如果加上 -o 參數可以指定產生的更新檔的位置:

$ git format-patch -2 -o /tmp/patches
/tmp/patches/0001-update-info.html.patch
/tmp/patches/0002-add-product-page.patch

使用更新檔

要使用 format-patch 指令產出的修正檔,使用的是 git am 指令:

$ git am /tmp/patches/*
Applying: update info.html
Applying: add product page

你可以一次使用一個更新檔,或是像這樣一口氣把剛剛產出在 /tmp/patches 目錄的更新檔全部用上,Git 會依據檔案的名字依序一個一個套在現有的專案上了。


← 上一章:使用 GitHub 免費製作個人網站 下一章:Git Flow 是什麼?為什麼需要這種東西? →

Comments