文本是寫給新手的Git入門教程。本文的目的是讓新手能夠快速了解並開始使用Git,因此只會介紹最基本、同時也是最核心的知識。其中包括使用Git的基本步驟和Git中最常用的命令,以及如何使用GitHub托管自己的代碼。
1. 關於Git的讀音
“git”讀作/git/(給特),而不是/jit/(吉特)。
2. Git比SVN等版本控制工具好在哪里?
這是新手最常問的問題。我也曾在心里產生過這種疑惑,原因一方面是因為好奇心,因為在我看來,SVN已經足夠優秀了,為什么又忽然冒出來一個Git呢?另一方面則是希望能通過將Git與自己熟悉的SVN進行比較,從而更快、更好地了解Git。
但是,在這里我要駁回這種疑問。不要認為Git一定比SVN好、處處比SVN好。Git有着更先進的設計理念是沒錯,但更先進與更好並不是等價的。工具,永遠只有最合適而沒有最好。
打個比方,普通的文本編輯器和功能豐富的IDE開發工具哪個好?對於我們專門做開發的人來說,可能大部分時候IDE更方便,因為有各種便捷的功能,代碼提示,錯誤提示,自動發布,自動部署……等等。但即使IDE有這么多優點和好處,是否就能說明IDE一定比普通的文本編輯器更好呢?不能吧?
某些“極客”們喜歡把自己喜歡的東西捧上天,同時把“競爭對手”踩在腳下。個人認為這是非常不好的習慣,程序員的世界不應該有宗教。
所以,關於這個問題的答案,總結下來就是:
Git與SVN相比沒有本質區別。是的,分布式並不是本質區別,就像命令行和GUI界面一樣。但它有一些優點:
- 對多人協作的支持更好
- 很多操作的效率更高
- 不需要始終聯網就能進行版本管理
- and more ...
3. 命令行還是GUI界面?
現在有很多Git工具供我們選擇,其中一些是基於命令行的,另一些則是基於GUI界面的,到底該如何選擇呢?
我建議新手在學習階段應該用基於命令行的Git工具,這樣更有助於了解git各個功能的細節和原理。
可以在下面的網站下載安裝Git,該網站同時提供了Windows、Mac、Linux和Solaris版本的程序:
在Windows下,另一個常用的是msysgit:
msysgit打包了一個Cygwin,從而在Windows下模擬了Linux環境,因此可以在其中運行Git程序。
安裝了msysgit后,會在資源管理器的右鍵菜單中注冊相關項目。其中“Git Bash”用於啟動Git並將工作目錄設置到當前目錄下;“Git Gui”用來打開GUI界面的Git;“Git Init Here”則在當前目錄下創建一個倉庫並打開Git Bash,相當於先打開Git Bash然后運行git init命令。關於Git常用命令后面會詳細介紹。
4. 在Git中獲取幫助
遇到問題時查閱資料或上網搜索是很方便的,但是關於很多命令的用法在Git中已經有了詳細介紹。下面就來介紹幾個顯示幫助的命令。
$ git help
此命令獲取git使用的一般幫助信息
$ git help command | concept
顯示某個命令或主題(concept不知該如何翻譯,就是下面用-g參數所顯示的那些)的詳細幫助。例如:
git help commit #顯示commit命令的詳細用法
git help everyday #顯示everyday幫助指南
$ git help -a
列出當前安裝的git中所有可用的子命令
$ git help -g
列出當前安裝的git中提供的主題指南(concept guides,不知道該如何翻譯)
5. 一些名詞和概念
- 版本
廣義上講,文件的每一次修改都可以稱為一個版本。版本管理系統正是用來管理和跟蹤文件的修改的。在版本管理系統中,每一次提交會形成一個版本記錄,這些記錄串接起來就是整個項目的演化歷史。
- 版本庫
版本庫,也叫版本倉庫、倉庫,英文名為Repository,經常簡寫為Repo,是Git用來進行版本管理的主要場所。
在Git中使用init
或clone
創建一個新的版本庫后,就會在當前目錄下生成一個.git目錄,這個就是Git的版本庫,其中保存着本項目的各文件數據、提交記錄、分支、配置等等數據。如果我們把.git目錄刪除的話,版本庫也就丟失了。這一點和SVN不同,SVN會把相關數據分散到各個文件所在的目錄中。
- 工作區(Working Directory)
工作區就是版本倉庫所在的目錄,其中的文件處於Git版本庫的管理之下。使用init
或clone
創建一個新的版本庫后,當前目錄就成為了工作區。
- 本地倉庫 vs 遠程倉庫
首先,本地倉庫和遠程倉庫沒有本質區別。在使用Git時,為了方便團隊成員之間交換代碼,通常會專門部署一台“服務器”作為公共倉庫,每個人可以向公共倉庫中提交自己的代碼,也可以從公共倉庫中更新其他人的最新提交。對大家來說,這個公共倉庫就是一個遠程倉庫。
- 克隆(clone)
克隆就是復制一個已經存在的版本庫。例如我們可以將公共版本庫(遠程倉庫)克隆一份到自己的電腦上。
- 提交(commit)
將工作區中的代碼合並到版本庫中的操作就叫提交。每一次提交都會在版本庫中留下一個記錄,日后可以用其來進行對比、回退等操作。換句話說,處於工作區中但仍未提交的修改不會受到Git的保護,如果文件被刪除了,或者改錯了,將無法回退到之前的某個正確的狀態(如果文本編輯器或IDE還沒關的話說不定能彌補回這個錯誤)。
- 推送(push) vs 拉取(pull)
將工作區中的代碼合並到本地倉庫的操作叫做提交,而在版本庫之間進行合並操作就不是提交了,叫做推送。因為對Git來說,兩個版本庫之間的關系是平等的,不存在誰“提交”給誰一說。
相應地,從另一個倉庫中把代碼合並到本地倉庫的過程就叫拉取。
- 分支
每次提交是有先后關系的,正常來說,所有提交將會串成一條直線。而分支就是在原本的直線上分出去的岔路。一個分支從分出去的那一刻起,在其上的修改將完全獨立於其他分支(除非你顯式地將2個分支合並到一起)。
分支的演進過程很像物種的進化。物種在后代之間產生不同的變異,當一個群體中的變異積累到一定程度時,該群體很有可能有機會分化為一個新的物種,此后,新物種與原物種之間將平行進化。這個比喻只適用於演化出新分支的過程,但自然界中兩個物種之間不太可能會合並(人工干預除外)。
6. 總結
好了,第一部分就先到這里。接下來我們將介紹Git中的常用操作,從而讓你能夠快速上手,敬請期待。如果你覺得本文對你有幫助,請幫忙點個贊!!