### Git帮助文档知识点详解
#### 一、Git简介与特性
**Git** 是一款由Linux之父Linus Torvalds发起开发的分布式版本控制系统。它不仅开源且免费,还具备轻量、快速以及便捷的特点。Git的核心优势在于其分布式的设计理念,这使得每个开发者在本地就可以实现完整的版本控制功能。
#### 二、为什么选择Git?
1. **分布式的灵活性**:Git采用分布式版本控制机制,这意味着每个开发者的本地仓库都是完整的代码库副本,不依赖中心服务器也能进行版本控制。
2. **轻量级分支管理**:Git的分支创建成本极低,可以轻松创建多个分支来进行不同的开发任务,这有助于隔离开发环境,避免相互干扰。
3. **高效的工作流程**:Git支持多种高效的工作流,比如双分支结构等,能够提高团队协作效率。
#### 三、集中式与分布式版本控制系统的对比
- **集中式版本控制系统**(如SVN):
- 需要通过中心服务器进行提交。
- 提交规范较难统一执行。
- 每日构建较为困难。
- 文件系统中可能存在许多版本控制相关的隐藏文件。
- **分布式版本控制系统**(如Git):
- 不依赖中心服务器即可进行版本控制。
- 支持多个服务器,每个开发者都可以作为服务器。
- 分支操作更简便。
- 工作目录更加整洁。
#### 四、Git基础操作
**本地常用命令**:
1. **创建代码仓库**:
- 使用`git init`命令可以在指定目录下初始化一个新的Git仓库。
2. **添加文件**:
- `git add <file>`:将特定文件加入暂存区。
- `git add .`:将所有改动过的文件加入暂存区。
- `git add *.js`:将所有`.js`文件加入暂存区。
3. **查看仓库状态**:
- `git status`:显示当前工作目录的状态,包括哪些文件被修改了、哪些文件还未被加入版本控制等。
4. **提交代码**:
- `git commit <file>`:提交单个文件到仓库。
- `git commit -a`:提交所有已加入暂存区的文件。
- `git commit *.js`:提交所有`.js`文件。
5. **忽略某些文件**:
- 在`.gitignore`文件中添加需要忽略的文件或文件类型,例如`.DS_Store`、`*.class`、`*.jar`等。
**远程操作命令**:
1. **从远程复制仓库**:
- `git clone <repo-url>`:克隆一个远程仓库到本地。
- `git remote add origin <repo-url>`:将远程仓库添加为`origin`别名。
2. **从远程同步仓库**:
- `git pull origin <branch>`:从远程仓库的指定分支拉取最新代码。
3. **提交修改至远程**:
- `git push origin <branch>`:将本地分支的修改推送到远程仓库的相应分支。
#### 五、版本控制规范
1. **双分支结构**:
- **develop分支**:主要用于日常开发,包含最新的开发进展。
- **master分支**:仅包含最终发布的稳定版本代码。
2. **代码提交守则**:
- 提交应有完整的意义,即每次提交都应该是一个可独立运行的功能点。
- 不同功能的代码应该分开提交。
- 尽量避免使用`git commit -a`来一次性提交所有改动。
- 认真编写提交信息,确保清晰、准确。
- 只有编译、运行和测试均通过的代码才能提交到远程仓库。
#### 六、高级工作流——Git Flow
**Git Flow**是一种基于Git的项目管理方法,适用于大型项目和团队协作。
1. **初始化Git Flow**:
- 使用`git flow init`命令初始化Git Flow。
2. **以特性为单位的开发**:
- 使用`git flow feature start <feature-name>`创建特性分支。
- 完成后使用`git flow feature finish <feature-name>`合并回develop分支。
3. **轻松发布新版本**:
- 使用`git flow release start <version>`开始准备新版本发布。
- 完成后使用`git flow release finish <version>`完成发布,合并回master和develop分支。
#### 七、参考资料
- [Git官方网站](http://git-scm.com/)
- [MSysGit](http://code.google.com/p/msysgit/)
- [Pro Git书](http://progit.org/book/zh/)
- [Git Flow](https://github.com/nvie/gitflow)
- [GitBox](http://www.gitboxapp.com/)