上周,我在 FITC SCREENS 為設計師們做了一次關于GitHub的演講,你可以在這裡看一下 演講的幻燈片 。我覺得把演講的精華内容放在部落格上讓大家都能看到,是一件很重要的事,是以這就是你接下來将要看到的。

Git是一個管理和更改檔案的工具,GitHub的是建立在Git上的一個Web服務。這篇文章就是準備向你介紹一些Git和GitHub的基礎知識,并教你如何使用這些工具與你的團隊成員協作。
Git可以管理任何類型的檔案,但它通常用于文本檔案和圖像管理。通常情況下,我們不會用它來存儲格式比較複雜的檔案,比如PSD檔案。
我們使用Git有兩個主要原因。其一是它可以幫助我們管理多個團隊成員在相同的檔案上做的更改 —— 幫助我們跟蹤誰在什麼時候、做什麼樣的更改。使用Git的好處是很具體的,但它又有一個陡峭的學習曲線。然而,學習Git是偉大的第一步,它教你學着去改變你已設計的項目。本文也不打算深入到指令行或一個特定的工具,而是教你一些高層次的概念,這将有助于你無視工具的不同(因為它們本質上都是一樣的)。
分支(Branches)
分支用來隔離檔案更改的。想像一下,你所有的檔案複制被到一個新檔案夾,所做的任何更改隻是在副本操作,在最後你
拉(pull)
這些副本放回到原來的檔案夾。
一個分支就是像對你所有的檔案做一份複制。
“主”分支(“master” branch)
是一個标準分支 —— 所有新分支都是在主分支上建立的。
當你從主分支建立一個新的分支,就像你為所有的檔案建立了一份新副本,這些副本上所做的更改并不會反映回原檔案夾(更改新分支内容,主分支不會有變化,除非你 push,接下來會有講到)。
送出(Commits)
當你操作一個分支時,就像你正在做修改這些檔案的副本。當你完成了一個更改,比如增加了一些新的CSS,你應該
送出(Commits)
你的修改。這種“儲存”在新目錄中的新檔案的快照,可以讓你随後
恢複(revert)
到該時間點。在你送出之前,沒有什麼是永久的,是以你可以很容易地做出一些奇怪的、實驗性的更改,看它是否還能正常工作。
當你送出時,你隻是送出給你的分支,你的分支仍然是那個主分支的一部分,代表的是一系列的送出操作之後的結果。
上圖你的分支(Your Branch) 就是有兩次送出結果之後的分支,依舊是主分支的一部分。
本地和遠端(Local & Remote)
這是讓Git變得有點複雜的那部分。主分支和你的分支都存在于
本地(Local)
,也有主分支的一個副本在GitHub上,即
遠端端(Remote)
。這就像在辦公室有一個共享檔案伺服器,它有一個與你保持同步的檔案夾。
當你建立一個新的分支,所有的修改都是在本地操作(你電腦的檔案夾中)。
同樣,你的分支隻存在于你的本地計算機上,直到你把它
推到(push)
遠端端,這就是接下來要說的。
推送和拉回(Pushing & Pulling)
當你準備向人展示你的更改時,你就應該把你的分支,其中包括變更,都
推送(push)
到GitHub上。這類似于你把自己本地最新版本的檔案夾複制到共享的檔案伺服器。
現在你的最新版本分支在本地和遠端端都有了。一旦你把你的更改推送到GitHub上,就需要建立一個
拉回(pull)
的請求(原因往下看),這是一個将你的分支更改拉回到主分支的請求。
一旦這些更改都被拉入遠端主分支,你的本地主分支的版本是過時的(記住,此時你的分支上的更改會被暫時孤立),是以現在又需要從遠端拉最新的版本來更新您的本地主分支,就像從伺服器重新複制原始檔案。
現在就令人困惑了,因為我們在兩種情況下都使用了“拉”一詞。第一次,我們想把我們的分支更改合并到主分支;第二次,我們想把主伺服器上的更改拉回到本地以保持最新版。
總之,Git是團隊協作時一個非常好用的檔案管理工具,不過學起來确實比較複雜。我們都知道要想熟悉它,最好的方式就是不斷去用它。