2.1 Git 基礎 - 取得項目的 Git 倉庫

在工做目錄中初始化新倉庫

要對現有的某個項目開始用 Git 管理,只需到此項目所在的目錄,執行:git

$ git init

若是當前目錄下有幾個文件想要歸入版本控制,須要先用 git add 命令告訴 Git 開始對這些文件進行跟蹤,而後提交:github

$ git add *.c
$ git add README
$ git commit -m 'initial project version'

 

從現有倉庫克隆

若是想對某個開源項目出一份力,能夠先把該項目的 Git 倉庫複製一份出來,這就須要用到 git clone 命令。若是你熟悉其餘的 VCS 好比 Subversion,你可能已經注意到這裏使用的是 clone 而不是checkout。這是個很是重要的差異,Git 收取的是項目歷史的全部數據(每個文件的每個版本),服務器上有的數據克隆以後本地也都有了。實際上,即使服務器的磁盤發生故障,用任何一個克隆出來的客戶端均可以重建服務器上的倉庫,回到當初克隆時的狀態(雖然可能會丟失某些服務器端的掛鉤設置,但全部版本的數據仍舊還在,有關細節請參考第四章)。正則表達式

克隆倉庫的命令格式爲 git clone [url]。好比,要克隆 Ruby 語言的 Git 代碼倉庫 Grit,能夠用下面的命令:shell

$ git clone git://github.com/schacon/grit.git

這會在當前目錄下建立一個名爲grit的目錄,其中包含一個 .git 的目錄,用於保存下載下來的全部版本記錄,而後從中取出最新版本的文件拷貝。若是進入這個新建的 grit 目錄,你會看到項目中的全部文件已經在裏邊了,準備好後續的開發和使用。若是但願在克隆的時候,本身定義要新建的項目目錄名稱,能夠在上面的命令末尾指定新的名字:服務器

$ git clone git://github.com/schacon/grit.git mygrit

惟一的差異就是,如今新建的目錄成了 mygrit,其餘的都和上邊的同樣。ui

Git 支持許多數據傳輸協議。以前的例子使用的是 git:// 協議,不過你也能夠用 http(s):// 或者user@server :/path.git 表示的 SSH 傳輸協議。咱們會在第四章詳細介紹全部這些協議在服務器端該如何配置使用,以及各類方式之間的利弊。url

 

跟蹤新文件

使用命令 git add 開始跟蹤一個新文件。因此,要跟蹤 README 文件,運行:spa

$ git add README

忽略某些文件

通常咱們總會有些文件無需歸入 Git 的管理,也不但願它們總出如今未跟蹤文件列表。一般都是些自動生成的文件,好比日誌文件,或者編譯過程當中建立的臨時文件等。咱們能夠建立一個名爲 .gitignore 的文件,列出要忽略的文件模式。來看一個實際的例子:.net

$ cat .gitignore
*.[oa]
*~

第一行告訴 Git 忽略全部以 .o 或 .a 結尾的文件。通常這類對象文件和存檔文件都是編譯過程當中出現的,咱們用不着跟蹤它們的版本。第二行告訴 Git 忽略全部以波浪符(~)結尾的文件,許多文本編輯軟件(好比 Emacs)都用這樣的文件名保存副本。此外,你可能還須要忽略 logtmp 或者 pid 目錄,以及自動生成的文檔等等。要養成一開始就設置好 .gitignore 文件的習慣,以避免未來誤提交這類無用的文件。版本控制

文件 .gitignore 的格式規範以下:

  • 全部空行或者以註釋符號  開頭的行都會被 Git 忽略。
  • 可使用標準的 glob 模式匹配。
  • 匹配模式最後跟反斜槓(/)說明要忽略的是目錄。
  • 要忽略指定模式之外的文件或目錄,能夠在模式前加上驚歎號(!)取反。

所謂的 glob 模式是指 shell 所使用的簡化了的正則表達式。星號(*)匹配零個或多個任意字符;[abc]匹配任何一個列在方括號中的字符(這個例子要麼匹配一個 a,要麼匹配一個 b,要麼匹配一個 c);問號(?)只匹配一個任意字符;若是在方括號中使用短劃線分隔兩個字符,表示全部在這兩個字符範圍內的均可以匹配(好比 [0-9] 表示匹配全部 0 到 9 的數字)。

咱們再看一個 .gitignore 文件的例子:

# 此爲註釋 – 將被 Git 忽略
# 忽略全部 .a 結尾的文件
*.a
# 但 lib.a 除外
!lib.a
# 僅僅忽略項目根目錄下的 TODO 文件,不包括 subdir/TODO
/TODO
# 忽略 build/ 目錄下的全部文件
build/
# 會忽略 doc/notes.txt 但不包括 doc/server/arch.txt
doc/*.txt
# ignore all .txt files in the doc/ directory
doc/**/*.txt

**/ pattern is available in Git since version 1.8.2.

相關文章
相關標籤/搜索