起步 本章介紹開(kāi)始使用 git 前的相關(guān)知識(shí)。我們會(huì)先了解一些版本控制工具的歷史背景,,然后試著讓 Git 在你的系統(tǒng)上跑起來(lái),,直到最后配置好,可以正常開(kāi)始開(kāi)發(fā)工作,。讀完本章,,你就會(huì)明白為什么 Git 會(huì)如此流行,為什么你應(yīng)該立即開(kāi)始使用它,。(查看Git詳解系列的全部文章) 1.1 關(guān)于版本控制 什么是版本控制,?我真的需要嗎?版本控制是一種記錄若干文件內(nèi)容變化,,以便將來(lái)查閱特定版本修訂情況的系統(tǒng),。在本書(shū)所展示的例子中,我們僅對(duì)保存著軟件源代碼的文本文件作版本控制管理,,但實(shí)際上,,你可以對(duì)任何類(lèi)型的文件進(jìn)行版本控制,。 如果你是位圖形或網(wǎng)頁(yè)設(shè)計(jì)師,,可能會(huì)需要保存某一幅圖片或頁(yè)面布局文件的所有修訂版本(這或許是你非常渴望擁有的功能),。采用版本控制系統(tǒng) (VCS)是個(gè)明智的選擇,。有了它你就可以將某個(gè)文件回溯到之前的狀態(tài),甚至將整個(gè)項(xiàng)目都回退到過(guò)去某個(gè)時(shí)間點(diǎn)的狀態(tài),。你可以比較文件的變化細(xì)節(jié),,查出最 后是誰(shuí)修改了哪個(gè)地方,從而導(dǎo)致出現(xiàn)怪異問(wèn)題,,又是誰(shuí)在何時(shí)報(bào)告了某個(gè)功能缺陷等等,。使用版本控制系統(tǒng)通常還意味著,就算你亂來(lái)一氣把整個(gè)項(xiàng)目中的文件改 的改刪的刪,你也照樣可以輕松恢復(fù)到原先的樣子,。但額外增加的工作量卻微乎其微,。 本地版本控制系統(tǒng) 許多人習(xí)慣用復(fù)制整個(gè)項(xiàng)目目錄的方式來(lái)保存不同的版本,或許還會(huì)改名加上備份時(shí)間以示區(qū)別,。這么做唯一的好處就是簡(jiǎn)單,。不過(guò)壞處也不少:有時(shí)候會(huì)混淆所在的工作目錄,一旦弄錯(cuò)文件丟了數(shù)據(jù)就沒(méi)法撤銷(xiāo)恢復(fù),。 為了解決這個(gè)問(wèn)題,,人們很久以前就開(kāi)發(fā)了許多種本地版本控制系統(tǒng),大多都是采用某種簡(jiǎn)單的數(shù)據(jù)庫(kù)來(lái)記錄文件的歷次更新差異(見(jiàn)圖 1-1),。
圖 1-1. 本地版本控制系統(tǒng) 其中最流行的一種叫做 rcs,,現(xiàn)今許多計(jì)算機(jī)系統(tǒng)上都還看得到它的蹤影。甚至在流行的 Mac OS X 系統(tǒng)上安裝了開(kāi)發(fā)者工具包之后,,也可以使用 rcs 命令,。它的工作原理基本上就是保存并管理文件補(bǔ)丁(patch),。文件補(bǔ)丁是一種特定格式的文本文件,,記錄著對(duì)應(yīng)文件修訂前后的內(nèi)容變化。所以,,根據(jù)每次 修訂后的補(bǔ)丁,,rcs 可以通過(guò)不斷打補(bǔ)丁,計(jì)算出各個(gè)版本的文件內(nèi)容,。 集中化的版本控制系統(tǒng) 接下來(lái)人們又遇到一個(gè)問(wèn)題,,如何讓在不同系統(tǒng)上的開(kāi)發(fā)者協(xié)同工作?于是,,集中化的版本控制系統(tǒng)( Centralized Version Control Systems,,簡(jiǎn)稱(chēng) CVCS )應(yīng)運(yùn)而生。這類(lèi)系統(tǒng),,諸如 CVS,,Subversion 以及 Perforce 等,都有一個(gè)單一的集中管理的服務(wù)器,,保存所有文件的修訂版本,,而協(xié)同工作的人們都通過(guò)客戶(hù)端連到這臺(tái)服務(wù)器,取出最新的文件或者提交更新,。多年以來(lái),,這 已成為版本控制系統(tǒng)的標(biāo)準(zhǔn)做法(見(jiàn)圖 1-2)。 圖 1-2. 集中化的版本控制系統(tǒng) 這種做法帶來(lái)了許多好處,,特別是相較于老式的本地 VCS 來(lái)說(shuō)?,F(xiàn)在,,每個(gè)人都可以在一定程度上看到項(xiàng)目中的其他人正在做些什么。而管理員也可以輕松掌控每個(gè)開(kāi)發(fā)者的權(quán)限,,并且管理一個(gè) CVCS 要遠(yuǎn)比在各個(gè)客戶(hù)端上維護(hù)本地?cái)?shù)據(jù)庫(kù)來(lái)得輕松容易,。 事分兩面,有好有壞,。這么做最顯而易見(jiàn)的缺點(diǎn)是中央服務(wù)器的單點(diǎn)故障,。如果宕機(jī)一小時(shí),那么在這一小時(shí)內(nèi),,誰(shuí)都無(wú)法提交更新,,也就無(wú)法協(xié)同工作。要 是中央服務(wù)器的磁盤(pán)發(fā)生故障,,碰巧沒(méi)做備份,,或者備份不夠及時(shí),就還是會(huì)有丟失數(shù)據(jù)的風(fēng)險(xiǎn),。最壞的情況是徹底丟失整個(gè)項(xiàng)目的所有歷史更改記錄,,而被客戶(hù)端 提取出來(lái)的某些快照數(shù)據(jù)除外,但這樣的話(huà)依然是個(gè)問(wèn)題,,你不能保證所有的數(shù)據(jù)都已經(jīng)有人事先完整提取出來(lái)過(guò),。本地版本控制系統(tǒng)也存在類(lèi)似問(wèn)題,只要整個(gè)項(xiàng) 目的歷史記錄被保存在單一位置,,就有丟失所有歷史更新記錄的風(fēng)險(xiǎn),。 分布式版本控制系統(tǒng) 于是分布式版本控制系統(tǒng)( Distributed Version Control System,簡(jiǎn)稱(chēng) DVCS )面世了,。在這類(lèi)系統(tǒng)中,,像 Git,Mercurial,,Bazaar 以及 Darcs 等,,客戶(hù)端并不只提取最新版本的文件快照,而是把原始的代碼倉(cāng)庫(kù)完整地鏡像下來(lái),。這么一來(lái),,任何一處協(xié)同工作用的服務(wù)器發(fā)生故障,事后都可以用任何一個(gè)鏡 像出來(lái)的本地倉(cāng)庫(kù)恢復(fù),。因?yàn)槊恳淮蔚奶崛〔僮?,?shí)際上都是一次對(duì)代碼倉(cāng)庫(kù)的完整備份(見(jiàn)圖 1-3),。 圖 1-3. 分布式版本控制系統(tǒng)
更進(jìn)一步,,許多這類(lèi)系統(tǒng)都可以指定和若干不同的遠(yuǎn)端代碼倉(cāng)庫(kù)進(jìn)行交互。籍此,,你就可以在同一個(gè)項(xiàng)目中,,分別和不同工作小組的人相互協(xié)作,。你可以根據(jù)需要設(shè)定不同的協(xié)作流程,比如層次模型式的工作流,,而這在以前的集中式系統(tǒng)中是無(wú)法實(shí)現(xiàn)的,。
1.2 Git 簡(jiǎn)史 同生活中的許多偉大事件一樣,Git 誕生于一個(gè)極富紛爭(zhēng)大舉創(chuàng)新的年代,。Linux 內(nèi)核開(kāi)源項(xiàng)目有著為數(shù)眾廣的參與者,。絕大多數(shù)的 Linux 內(nèi)核維護(hù)工作都花在了提交補(bǔ)丁和保存歸檔的繁瑣事務(wù)上(1991-2002年間)。到 2002 年,,整個(gè)項(xiàng)目組開(kāi)始啟用分布式版本控制系統(tǒng) BitKeeper 來(lái)管理和維護(hù)代碼,。 到了 2005 年,開(kāi)發(fā) BitKeeper 的商業(yè)公司同 Linux 內(nèi)核開(kāi)源社區(qū)的合作關(guān)系結(jié)束,,他們收回了免費(fèi)使用 BitKeeper 的權(quán)力,。這就迫使 Linux 開(kāi)源社區(qū)(特別是 Linux 的締造者 Linus Torvalds )不得不吸取教訓(xùn),只有開(kāi)發(fā)一套屬于自己的版本控制系統(tǒng)才不至于重蹈覆轍,。他們對(duì)新的系統(tǒng)制訂了若干目標(biāo): * 速度 * 簡(jiǎn)單的設(shè)計(jì) * 對(duì)非線性開(kāi)發(fā)模式的強(qiáng)力支持(允許上千個(gè)并行開(kāi)發(fā)的分支) * 完全分布式 * 有能力高效管理類(lèi)似 Linux 內(nèi)核一樣的超大規(guī)模項(xiàng)目(速度和數(shù)據(jù)量) 自誕生于 2005 年以來(lái),,Git 日臻成熟完善,在高度易用的同時(shí),,仍然保留著初期設(shè)定的目標(biāo),。它的速度飛快,極其適合管理大項(xiàng)目,,它還有著令人難以置信的非線性分支管理系統(tǒng)(見(jiàn)第三章),,可以應(yīng)付各種復(fù)雜的項(xiàng)目開(kāi)發(fā)需求。 1.3 Git 基礎(chǔ) 那么,,簡(jiǎn)單地說(shuō),,Git 究竟是怎樣的一個(gè)系統(tǒng)呢?請(qǐng)注意,,接下來(lái)的內(nèi)容非常重要,,若是理解了 Git 的思想和基本工作原理,用起來(lái)就會(huì)知其所以然,,游刃有余,。在開(kāi)始學(xué)習(xí) Git 的時(shí)候,請(qǐng)不要嘗試把各種概念和其他版本控制系統(tǒng)(諸如 Subversion 和 Perforce 等)相比擬,,否則容易混淆每個(gè)操作的實(shí)際意義,。Git 在保存和處理各種信息的時(shí)候,雖然操作起來(lái)的命令形式非常相近,,但它與其他版本控制系統(tǒng)的做法頗為不同,。理解這些差異將有助于你準(zhǔn)確地使用 Git 提供的各種工具。 直接記錄快照,,而非差異比較 Git 和其他版本控制系統(tǒng)的主要差別在于,,Git 只關(guān)心文件數(shù)據(jù)的整體是否發(fā)生變化,,而大多數(shù)其他系統(tǒng)則只關(guān)心文件內(nèi)容的具體差異。這類(lèi)系統(tǒng) (CVS,,Subversion,,Perforce,Bazaar 等等)每次記錄有哪些文件作了更新,,以及都更新了哪些行的什么內(nèi)容,,請(qǐng)看圖 1-4。 圖 1-4. 其他系統(tǒng)在每個(gè)版本中記錄著各個(gè)文件的具體差異
Git 并不保存這些前后變化的差異數(shù)據(jù),。實(shí)際上,,Git 更像是把變化的文件作快照后,記錄在一個(gè)微型的文件系統(tǒng)中,。每次提交更新時(shí),,它會(huì)縱覽一遍所有文件的指紋信息并對(duì)文件作一快照,然后保存一個(gè)指向這次快照 的索引,。為提高性能,,若文件沒(méi)有變化,Git 不會(huì)再次保存,,而只對(duì)上次保存的快照作一鏈接,。Git 的工作方式就像圖 1-5 所示。 圖 1-5. Git 保存每次更新時(shí)的文件快照
這是 Git 同其他系統(tǒng)的重要區(qū)別,。它完全顛覆了傳統(tǒng)版本控制的套路,,并對(duì)各個(gè)環(huán)節(jié)的實(shí)現(xiàn)方式作了新的設(shè)計(jì)。Git 更像是個(gè)小型的文件系統(tǒng),,但它同時(shí)還提供了許多以此為基礎(chǔ)的超強(qiáng)工具,,而不只是一個(gè)簡(jiǎn)單的 VCS。稍后在第三章討論 Git 分支管理的時(shí)候,,我們會(huì)再看看這樣的設(shè)計(jì)究竟會(huì)帶來(lái)哪些好處,。 近乎所有操作都是本地執(zhí)行 在 Git 中的絕大多數(shù)操作都只需要訪問(wèn)本地文件和資源,不用連網(wǎng),。但如果用 CVCS 的話(huà),,差不多所有操作都需要連接網(wǎng)絡(luò)。因?yàn)?Git 在本地磁盤(pán)上就保存著所有當(dāng)前項(xiàng)目的歷史更新,,所以處理起來(lái)速度飛快,。 舉個(gè)例子,如果要瀏覽項(xiàng)目的歷史更新摘要,,Git 不用跑到外面的服務(wù)器上去取數(shù)據(jù)回來(lái),,而直接從本地?cái)?shù)據(jù)庫(kù)讀取后展示給你看。所以任何時(shí)候你都可以馬上翻閱,,無(wú)需等待,。如果想要看當(dāng)前版本的文件和一個(gè)月 前的版本之間有何差異,Git 會(huì)取出一個(gè)月前的快照和當(dāng)前文件作一次差異運(yùn)算,,而不用請(qǐng)求遠(yuǎn)程服務(wù)器來(lái)做這件事,,或是把老版本的文件拉到本地來(lái)作比較。 用 CVCS 的話(huà),,沒(méi)有網(wǎng)絡(luò)或者斷開(kāi) VPN 你就無(wú)法做任何事情,。但用 Git 的話(huà),就算你在飛機(jī)或者火車(chē)上,,都可以非常愉快地頻繁提交更新,,等到了有網(wǎng)絡(luò)的時(shí)候再上傳到遠(yuǎn)程倉(cāng)庫(kù)。同樣,,在回家的路上,,不用連接 VPN 你也可以繼續(xù)工作。換作其他版本控制系統(tǒng),,這么做幾乎不可能,,抑或非常麻煩。比如 Perforce,,如果不連到服務(wù)器,,幾乎什么都做不了(譯注:默認(rèn)無(wú)法發(fā)出命令 時(shí)刻保持?jǐn)?shù)據(jù)完整性 在保存到 Git 之前,,所有數(shù)據(jù)都要進(jìn)行內(nèi)容的校驗(yàn)和(checksum)計(jì)算,并將此結(jié)果作為數(shù)據(jù)的唯一標(biāo)識(shí)和索引,。換句話(huà)說(shuō),,不可能在你修改了文件或目錄之后,Git 一無(wú)所知,。這項(xiàng)特性作為 Git 的設(shè)計(jì)哲學(xué),,建在整體架構(gòu)的最底層,。所以如果文件在傳輸時(shí)變得不完整,或者磁盤(pán)損壞導(dǎo)致文件數(shù)據(jù)缺失,,Git 都能立即察覺(jué),。 Git 使用 SHA-1 算法計(jì)算數(shù)據(jù)的校驗(yàn)和,通過(guò)對(duì)文件的內(nèi)容或目錄的結(jié)構(gòu)計(jì)算出一個(gè) SHA-1 哈希值,,作為指紋字符串,。該字串由 40 個(gè)十六進(jìn)制字符(0-9 及 a-f)組成,,看起來(lái)就像是:
Git 的工作完全依賴(lài)于這類(lèi)指紋字串,,所以你會(huì)經(jīng)常看到這樣的哈希值,。實(shí)際上,,所有保存在 Git 數(shù)據(jù)庫(kù)中的東西都是用此哈希值來(lái)作索引的,而不是靠文件名,。 多數(shù)操作僅添加數(shù)據(jù) 常用的 Git 操作大多僅僅是把數(shù)據(jù)添加到數(shù)據(jù)庫(kù),。因?yàn)槿魏我环N不可逆的操作,,比如刪除數(shù)據(jù),都會(huì)使回退或重現(xiàn)歷史版本變得困難重重。在別的 VCS 中,,若還未提交更新,,就有可能丟失或者混淆一些修改的內(nèi)容,,但在 Git 里,,一旦提交快照之后就完全不用擔(dān)心丟失數(shù)據(jù),特別是養(yǎng)成定期推送到其他倉(cāng)庫(kù)的習(xí)慣的話(huà),。 這種高可靠性令我們的開(kāi)發(fā)工作安心不少,,盡管去做各種試驗(yàn)性的嘗試好了,再怎樣也不會(huì)弄丟數(shù)據(jù),。至于 Git 內(nèi)部究竟是如何保存和恢復(fù)數(shù)據(jù)的,,我們會(huì)在第九章討論 Git 內(nèi)部原理時(shí)再作詳述。 文件的三種狀態(tài) 好,,現(xiàn)在請(qǐng)注意,,接下來(lái)要講的概念非常重要。對(duì)于任何一個(gè)文件,,在 Git 內(nèi)都只有三種狀態(tài):已提交(committed),,已修改(modified)和已暫存(staged)。已提交表示該文件已經(jīng)被安全地保存在本地?cái)?shù)據(jù)庫(kù) 中了,;已修改表示修改了某個(gè)文件,,但還沒(méi)有提交保存;已暫存表示把已修改的文件放在下次提交時(shí)要保存的清單中。 由此我們看到 Git 管理項(xiàng)目時(shí),,文件流轉(zhuǎn)的三個(gè)工作區(qū)域:Git 的工作目錄,,暫存區(qū)域,以及本地倉(cāng)庫(kù),。 圖 1-6. 工作目錄,,暫存區(qū)域,以及本地倉(cāng)庫(kù) 每個(gè)項(xiàng)目都有一個(gè) Git 目錄(譯注:如果 從項(xiàng)目中取出某個(gè)版本的所有文件和目錄,,用以開(kāi)始后續(xù)工作的叫做工作目錄。這些文件實(shí)際上都是從 Git 目錄中的壓縮對(duì)象數(shù)據(jù)庫(kù)中提取出來(lái)的,,接下來(lái)就可以在工作目錄中對(duì)這些文件進(jìn)行編輯,。 所謂的暫存區(qū)域只不過(guò)是個(gè)簡(jiǎn)單的文件,一般都放在 Git 目錄中,。有時(shí)候人們會(huì)把這個(gè)文件叫做索引文件,,不過(guò)標(biāo)準(zhǔn)說(shuō)法還是叫暫存區(qū)域。 基本的 Git 工作流程如下: 1. 在工作目錄中修改某些文件,。 2. 對(duì)修改后的文件進(jìn)行快照,,然后保存到暫存區(qū)域。 3. 提交更新,,將保存在暫存區(qū)域的文件快照永久轉(zhuǎn)儲(chǔ)到 Git 目錄中,。 所以,我們可以從文件所處的位置來(lái)判斷狀態(tài):如果是 Git 目錄中保存著的特定版本文件,,就屬于已提交狀態(tài),;如果作了修改并已放入暫存區(qū)域,就屬于已暫存狀態(tài),;如果自上次取出后,,作了修改但還沒(méi)有放到暫存區(qū)域,就 是已修改狀態(tài),。到第二章的時(shí)候,,我們會(huì)進(jìn)一步了解其中細(xì)節(jié),并學(xué)會(huì)如何根據(jù)文件狀態(tài)實(shí)施后續(xù)操作,以及怎樣跳過(guò)暫存直接提交,。
1.4 安裝 Git 是時(shí)候動(dòng)手嘗試下 Git 了,,不過(guò)得先安裝好它。有許多種安裝方式,,主要分為兩種,,一種是通過(guò)編譯源代碼來(lái)安裝;另一種是使用為特定平臺(tái)預(yù)編譯好的安裝包,。 從源代碼安裝 若是條件允許,,從源代碼安裝有很多好處,至少可以安裝最新的版本,。Git 的每個(gè)版本都在不斷嘗試改進(jìn)用戶(hù)體驗(yàn),,所以能通過(guò)源代碼自己編譯安裝最新版本就再好不過(guò)了。有些 Linux 版本自帶的安裝包更新起來(lái)并不及時(shí),,所以除非你在用最新的 distro 或者 backports,,那么從源代碼安裝其實(shí)該算是最佳選擇。 Git 的工作需要調(diào)用 curl,,zlib,,openssl,expat,,libiconv 等庫(kù)的代碼,,所以需要先安裝這些依賴(lài)工具。在有 yum 的系統(tǒng)上(比如 Fedora)或者有 apt-get 的系統(tǒng)上(比如 Debian 體系),,可以用下面的命令安裝:
之后,,從下面的 Git 官方站點(diǎn)下載最新版本源代碼:
然后編譯并安裝:
現(xiàn)在已經(jīng)可以用
在 Linux 上安裝 如果要在 Linux 上安裝預(yù)編譯好的 Git 二進(jìn)制安裝包,可以直接用系統(tǒng)提供的包管理工具,。在 Fedora 上用 yum 安裝:
在 Ubuntu 這類(lèi) Debian 體系的系統(tǒng)上,,可以用 apt-get 安裝:
在 Mac 上安裝 在 Mac 上安裝 Git 有兩種方式。最容易的當(dāng)屬使用圖形化的 Git 安裝工具,,界面如圖 1-7,,下載地址在: http://code.google.com/p/git-osx-installer 圖 1-7. Git OS X 安裝工具
另一種是通過(guò) MacPorts (
這種方式就不需要再自己安裝依賴(lài)庫(kù)了,,Macports 會(huì)幫你搞定這些麻煩事。一般上面列出的安裝選項(xiàng)已經(jīng)夠用,,要是你想用 Git 連接 Subversion 的代碼倉(cāng)庫(kù),,還可以加上 +svn 選項(xiàng),,具體將在第八章作介紹,。(譯注:還有一種是使用 homebrew( 在 Windows 上安裝 在 Windows 上安裝 Git 同樣輕松,,有個(gè)叫做 msysGit 的項(xiàng)目提供了安裝包,可以到 Google Code 的頁(yè)面上下載 exe 安裝文件并運(yùn)行:
完成安裝之后,,就可以使用命令行的
1.5 初次運(yùn)行 Git 前的配置 一般在新的系統(tǒng)上,我們都需要先配置下自己的 Git 工作環(huán)境,。配置工作只需一次,,以后升級(jí)時(shí)還會(huì)沿用現(xiàn)在的配置,。當(dāng)然,,如果需要,你隨時(shí)可以用相同的命令修改已有的配置,。 Git 提供了一個(gè)叫做 git config 的工具(譯注:實(shí)際是
●當(dāng)前項(xiàng)目的 git 目錄中的配置文件(也就是工作目錄中的 在 Windows 系統(tǒng)上,Git 會(huì)找尋用戶(hù)主目錄下的 用戶(hù)信息 第一個(gè)要配置的是你個(gè)人的用戶(hù)名稱(chēng)和電子郵件地址,。這兩條配置很重要,每次 Git 提交時(shí)都會(huì)引用這兩條信息,,說(shuō)明是誰(shuí)提交了更新,,所以會(huì)隨更新內(nèi)容一起被永久納入歷史記錄:
如果用了 文本編輯器 接下來(lái)要設(shè)置的是默認(rèn)使用的文本編輯器。Git 需要你輸入一些額外消息的時(shí)候,,會(huì)自動(dòng)調(diào)用一個(gè)外部文本編輯器給你用,。默認(rèn)會(huì)使用操作系統(tǒng)指定的默認(rèn)編輯器,一般可能會(huì)是 Vi 或者 Vim,。如果你有其他偏好,,比如 Emacs 的話(huà),可以重新設(shè)置:
差異分析工具 還有一個(gè)比較常用的是,,在解決合并沖突時(shí)使用哪種差異分析工具,。比如要改用 vimdiff 的話(huà):
Git 可以理解 kdiff3,tkdiff,,meld,,xxdiff,emerge,,vimdiff,,gvimdiff,ecmerge,,和 opendiff 等合并工具的輸出信息,。當(dāng)然,你也可以指定使用自己開(kāi)發(fā)的工具,,具體怎么做可以參閱第七章,。 查看配置信息 要檢查已有的配置信息,可以使用
有時(shí)候會(huì)看到重復(fù)的變量名,,那就說(shuō)明它們來(lái)自不同的配置文件(比如 也可以直接查閱某個(gè)環(huán)境變量的設(shè)定,只要把特定的名字跟在后面即可,,像這樣:
1.6 獲取幫助 想了解 Git 的各式工具該怎么用,,可以閱讀它們的使用幫助,方法有三:
比如,,要學(xué)習(xí) config 命令可以怎么用,,運(yùn)行:
我們隨時(shí)都可以瀏覽這些幫助信息而無(wú)需連網(wǎng)。不過(guò),,要是你覺(jué)得還不夠,,可以到 Frenode IRC 服務(wù)器(irc.freenode.net)上的 1.7 小結(jié) 至此,,你該對(duì) Git 有了點(diǎn)基本認(rèn)識(shí),,包括它和以前你使用的 CVCS 之間的差別。現(xiàn)在,,在你的系統(tǒng)上應(yīng)該已經(jīng)裝好了 Git,,設(shè)置了自己的名字和電郵。接下來(lái)讓我們繼續(xù)學(xué)習(xí) Git 的基礎(chǔ)知識(shí),。 |
|
來(lái)自: SamBookshelf > 《版本管理》