# 从一个未被纳入版本控制的项目开始
你现在正在着手在一个项目开发上,但是它还未被纳入版本控制系统的管理中,那就让我们从这个项目开始吧!在命令行界面中跳转到这个项目的根目录(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