如果你只想通過閱讀一章來學習 Git,那么本章將是你的不二選擇。 本章涵蓋了你在使用 Git 完成各種工作時將會用到的各種基本命令。 在學習完本章之后,你應該能夠配置并初始化一個倉庫(repository)、開始或停止跟蹤(track)文件、暫存(stage)或提交(commit)更改。 本章也將向你演示了如何配置 Git 來忽略指定的文件和文件模式、如何迅速而簡單地撤銷錯誤操作、如何瀏覽你的項目的歷史版本以及不同提交(commits)之間的差異、如何向你的遠程倉庫推送(push)以及如何從你的遠程倉庫拉?。╬ull)文件。
通常有兩種獲取 Git 項目倉庫的方式:
將尚未進行版本控制的本地目錄轉換為 Git 倉庫;
從其它服務器 克隆 一個已存在的 Git 倉庫。
兩種方式都會在你的本地機器上得到一個工作就緒的 Git 倉庫。
如果你有一個尚未進行版本控制的項目目錄,想要用 Git 來控制它,那么首先需要進入該項目目錄中。 如果你還沒這樣做過,那么不同系統上的做法有些不同:
在 Linux 上:
$ cd /home/user/my_project
在 macOS 上:
$ cd /Users/user/my_project
在 Windows 上:
$ cd /c/user/my_project
之后執行:
$ git init
該命令將創建一個名為 .git
的子目錄,這個子目錄含有你初始化的 Git 倉庫中所有的必須文件,這些文件是 Git 倉庫的骨干。 但是,在這個時候,我們僅僅是做了一個初始化的操作,你的項目里的文件還沒有被跟蹤。 (參見 Git 內部原理 來了解更多關于到底 .git
文件夾中包含了哪些文件的信息。)
如果在一個已存在文件的文件夾(而非空文件夾)中進行版本控制,你應該開始追蹤這些文件并進行初始提交。 可以通過 git add
命令來指定所需的文件來進行追蹤,然后執行 git commit
:
$ git add *.c $ git add LICENSE $ git commit -m 'initial project version'
稍后我們再逐一解釋這些指令的行為。 現在,你已經得到了一個存在被追蹤文件與初始提交的 Git 倉庫。
如果你想獲得一份已經存在了的 Git 倉庫的拷貝,比如說,你想為某個開源項目貢獻自己的一份力,這時就要用到 git clone
命令。 如果你對其它的 VCS 系統(比如說 Subversion)很熟悉,請留心一下你所使用的命令是"clone"而不是"checkout"。 這是 Git 區別于其它版本控制系統的一個重要特性,Git 克隆的是該 Git 倉庫服務器上的幾乎所有數據,而不是僅僅復制完成你的工作所需要文件。 當你執行 git clone
命令的時候,默認配置下遠程 Git 倉庫中的每一個文件的每一個版本都將被拉取下來。 事實上,如果你的服務器的磁盤壞掉了,你通??梢允褂萌魏我粋€克隆下來的用戶端來重建服務器上的倉庫 (雖然可能會丟失某些服務器端的鉤子(hook)設置,但是所有版本的數據仍在,詳見 在服務器上搭建 Git )。
克隆倉庫的命令是 git clone <url>
。 比如,要克隆 Git 的鏈接庫 libgit2
,可以用下面的命令:
$ git clone https://github.com/libgit2/libgit2
這會在當前目錄下創建一個名為 “libgit2” 的目錄,并在這個目錄下初始化一個 .git
文件夾, 從遠程倉庫拉取下所有數據放入 .git
文件夾,然后從中讀取最新版本的文件的拷貝。 如果你進入到這個新建的 libgit2
文件夾,你會發現所有的項目文件已經在里面了,準備就緒等待后續的開發和使用。
如果你想在克隆遠程倉庫的時候,自定義本地倉庫的名字,你可以通過額外的參數指定新的目錄名:
$ git clone https://github.com/libgit2/libgit2 mylibgit
這會執行與上一條命令相同的操作,但目標目錄名變為了 mylibgit
。
Git 支持多種數據傳輸協議。 上面的例子使用的是 https://
協議,不過你也可以使用 git://
協議或者使用 SSH 傳輸協議,比如 user@server:path/to/repo.git
。 在服務器上搭建 Git 將會介紹所有這些協議在服務器端如何配置使用,以及各種方式之間的利弊。