有兩種取得 Git 項目倉庫的方法。第一種是在現存的目錄下,通過導入所有文件來創建新的 Git 倉庫。第二種是從已有的 Git 倉庫克隆出一個新的鏡像倉庫來。
## 在工作目錄中初始化新倉庫
要對現有的某個項目開始用 Git 管理,只需到此項目所在的目錄,執行:
`$ git init`
初始化后,在當前目錄下會出現一個名為 .git 的目錄,所有 Git 需要的數據和資源都存放在這個目錄中。不過目前,僅僅是按照既有的結構框架初始化好了里邊所有的文件和目錄,但我們還沒有開始跟蹤管理項目中的任何一個文件。(在第九章我們會詳細說明剛才創建的 .git 目錄中究竟有哪些文件,以及都起些什么作用。)
如果當前目錄下有幾個文件想要納入版本控制,需要先用 git add 命令告訴 Git 開始對這些文件進行跟蹤,然后提交:
`$ git add *.c`
`$ git add README`
`$ git commit -m 'initial project version'`
稍后我們再逐一解釋每條命令的意思。不過現在,你已經得到了一個實際維護著若干文件的 Git 倉庫。
## 從現有倉庫克隆
如果想對某個開源項目出一份力,可以先把該項目的 Git 倉庫復制一份出來,這就需要用到` git clone` 命令。如果你熟悉其他的 VCS 比如 Subversion,你可能已經注意到這里使用的是 clone 而不是 `checkout`。這是個非常重要的差別,Git 收取的是項目歷史的所有數據(每一個文件的每一個版本),服務器上有的數據克隆之后本地也都有了。實際上,即便服務器的磁盤發生故障,用任何一個克隆出來的客戶端都可以重建服務器上的倉庫,回到當初克隆時的狀態(雖然可能會丟失某些服務器端的掛鉤設置,但所有版本的數據仍舊還在,有關細節請參考第四章)。
克隆倉庫的命令格式為 ``git clone [url]``。比如,要克隆 Ruby 語言的 Git 代碼倉庫 Grit,可以用下面的命令:
`$ git clone git://github.com/schacon/grit.git`
這會在當前目錄下創建一個名為grit的目錄,其中包含一個 .git 的目錄,用于保存下載下來的所有版本記錄,然后從中取出最新版本的文件拷貝。如果進入這個新建的 grit 目錄,你會看到項目中的所有文件已經在里邊了,準備好后續的開發和使用。如果希望在克隆的時候,自己定義要新建的項目目錄名稱,可以在上面的命令末尾指定新的名字:
`$ git clone git://github.com/schacon/grit.git mygrit`
唯一的差別就是,現在新建的目錄成了` mygrit`,其他的都和上邊的一樣。
Git 支持許多數據傳輸協議。之前的例子使用的是` git://` 協議,不過你也可以用 `http(s)://` 或者 `user@server:/path.git` 表示的 SSH 傳輸協議。我們會在第四章詳細介紹所有這些協議在服務器端該如何配置使用,以及各種方式之間的利弊。
- 1. 起步
- 1.1 關于版本控制
- 1.2 Git 簡史
- 1.3 Git 基礎
- 1.4 安裝 Git
- 1.5 初次運行 Git 前的配置
- 1.6 獲取幫助
- 1.7 小結
- 2. Git基礎
- 2.1 取得項目的 Git 倉庫
- 2.2 記錄每次更新到倉庫
- 2.3 查看提交歷史
- 2.4 撤消操作
- 2.5 遠程倉庫的使用
- 2.6 打標簽
- 2.7 技巧和竅門
- 2.8 小結
- 3. Git分支
- 3.1 何謂分支
- 3.2 分支的新建與合并
- 3.3 分支的管理
- 3.4 利用分支進行開發的工作流程
- 3.5 遠程分支
- 3.6 分支的衍合
- 3.7 小結
- 4. 服務器上的Git
- 4.1 協議
- 4.2 在服務器上部署 Git
- 4.3 生成 SSH 公鑰
- 4.4 架設服務器
- 4.5 公共訪問
- 4.6 GitWeb
- 4.7 Gitosis
- 4.8 Gitolite
- 4.9 Git 守護進程
- 4.10 Git 托管服務
- 4.11 小結
- 5. 分布式Git
- 5.1 分布式工作流程
- 5.2 為項目作貢獻
- 5.3 項目的管理
- 5.4 小結
- 6. Git工具
- 6.1 修訂版本(Revision)選擇
- 6.2 交互式暫存
- 6.3 儲藏(Stashing)
- 6.4 重寫歷史
- 6.5 使用 Git 調試
- 6.6 子模塊
- 6.7 子樹合并
- 6.8 總結
- 7. 自定義Git
- 7.1 配置 Git
- 7.2 Git屬性
- 7.3 Git掛鉤
- 7.4 Git 強制策略實例
- 7.5 總結
- 8. Git與其他系統
- 8.1 Git 與 Subversion
- 8.2 遷移到 Git
- 8.3 總結
- 9. Git 內部原理
- 9.2 Git 對象
- 9.3 Git References
- 9.4 Packfiles
- 9.5 The Refspec
- 9.6 傳輸協議
- 9.7 維護及數據恢復
- 9.8 總結
- 9.1 底層命令 (Plumbing) 和高層命令 (Porcelain)