# 從一個未被納入版本控制的項目開始
你現在正在著手在一個項目開發上,但是它還未被納入版本控制系統的管理中,那就讓我們從這個項目開始吧!在命令行界面中跳轉到這個項目的根目錄(root folder),然后鍵入 **“git init”** 命令來建立一個 Git 項目:
```
$ cd path/to/project/folder
$ git init
```
現在我們來看看在這個目錄下都有哪些文件(也包括所有的隱藏文件):
```
$ ls -la
```
你將會看到其中有一個新建的并且名字為 “.git” 的隱藏目錄。為什么有這么一個新的目錄呢?其實這是 Git 給我們創建的一個空的本地倉庫(local repository)。為什么是 “空” 呢?開始時 Git 并不會自動地把當前項目中的所有的內容當作 “初始版本(initial version)” 添加到本地倉庫中的,因此現在這個本地倉庫還不包含任何你的項目文件。
##### 名詞解釋
#### 工作副本(Working Copy)
項目的根目錄我們通常稱之為 “工作副本” 或者叫做 “工作目錄(working directory)”。這個文件夾包括項目所有的內容并且存放在你的本地計算機中。
你需要經常的詢問版本控制系統來同步你的工作副本。一定要記住,在你的本地計算機中只存在**唯一一個**和項目版本所對應的工作副本,多重并行的工作副本是不被允許的。
## 忽略文件
通常情況下在很多項目或者開發平臺中都會有一些你并不想要納入版本控制系統的文件,例如在 Mac OS 中,哪些 “.DS_Store” 文件,它并不需要納入版本控制中去。在其他的項目里,通常也會存在一些編譯文件和臨時的緩存文件。把它們納入版本控制系統中其實是毫無意義的。因此當你使用版本控制時,你就必須決定哪些項目文件需要被納入版本控制系統中,而哪些不需要。
##### 概念
#### 哪些文件不需要納入版本控制中?
哪些文件需要被忽略呢?一個最簡單分辨方法就是,那些在你開發項目過程中自動生成的文件。例如,臨時文件,日志和緩存文件等等。
還有其他的例子,比如那些為編譯代碼所提供的密碼或者個人設置文件。
下面這個連接:[github.com/github/gitignore](https://github.com/github/gitignore) 可以幫助你更好地了解在不同的項目和開發平臺上哪些內容不需要納入版本控制中去。
忽略文件列表被存放在項目根目錄中一個被稱之為 “.gitignore” 的文件中。在這里強烈的建議你,在做第一次提交之前,首先應該定義好這個忽略文件列表。因為一旦這些文件被提交了,要想再次把它們清除出版本控制系統就很麻煩。
現在,讓我們使用你最常用的編輯器來建立一個空的文件,命名為“.gitignore”,然后保存在項目的根目錄下。如果你是在 Mac OS 中,你就可以直接在這個文件中加上如下的內容:
```
.DS_Store
```
如果還想忽略其它文件,很簡單,在文件中為每一個需要忽略的內容添加一行。你也可以定義一個非常復雜的規則。 為了簡單起見,在這個理列出一些在你定義忽略文件時最經常用到的例子:
* **忽略一個特定的文件**:給出從項目根目錄開始的路徑和文件名,例如:path/to/file.ext 。
* **忽略項目下所有這個名字的文件**:只要給出文件的全名,不要包括任何路徑,例如 filename.ext 。
* **忽略項目下所有這個類型的文件**:例如 *.ext 。
* **忽略一個特定目錄下的所用文件**:例如 path/to/folder/* 。
## 完成你的第一次提交
當你定義好了你的忽略規則后,現在是時間來為你的項目進行第一次提交了。在本書之后的章節里我們將繼續深入細致地探討提交的工作原理和詳細流程。就現在而言,只須要執行如下的命令就可以了:
```
$ git add -A
$ git commit -m "Initial commit"
```
- Learn Version Control with Git 中文版
- 前言
- Part 1 - 基礎知識
- 什么是版本控制?
- 為什么要使用版本控制系統?
- 準備工作
- 版本控制的基本工作流程
- 從一個未被納入版本控制的項目開始
- 從一個已被納入版本控制的項目開始
- 工作在你的項目上
- Part 2 - 分支與合并
- 分支可以改變你的生命
- 在分支上工作
- 暫時保存更改
- 切換一個本地分支
- 合并改動
- 分支的工作流程
- Part 3 - 遠程倉庫
- 關于遠程倉庫
- 連接一個遠程倉庫
- 查看遠程數據
- 整合遠程的改動
- 發布一個本地分支
- 刪除分支
- Part 4 - 高級應用
- 撤銷操作
- 用 diff 來檢查改動
- 處理合并沖突
- Rebase 代替合并
- 子模塊
- git-flow 的工作流程
- 使用 SSH 公鑰驗證
- Part 5 - 工具與服務
- 桌面應用程序
- 比較和整合工具
- 代碼托管服務
- 更多學習資源
- 附錄
- 版本控制的最佳實踐
- 命令 101
- 從 Subversion 過渡到 Git
- 為什么選擇 Git