一、版本控制简介
1.概念
记录文件变化情况,以便查阅特定版本修订情况的工具
2.产生原因
- 方便了解项目的变动
- 方便检测代码问题,方便回滚修复
- 方便团队协同开发
3.版本控制分类
- 本地版本控制(RCS):在本地拷贝进行版本控制,缺点是不便于团队协作
- 集中式版本控制(SVN):提供一个集中式的服务器,用户提交到服务器上
- 分布式版本控制(git)
二、git基本使用
1.git配置
通常情况下使用git config
进行配置,在git中设定了global
、system
、local
等配置级别。 对于初学者来说,需要了解的是需要配置的是用户名和邮箱,这些信息用于标识提交者,配置完成以后,在github等平台可以显示提交者的信息。
git config --global user.name "username"
git config --global user.email "email@example.com"
2.开始工作
如果想要获取一个仓库,我们最常用的方法是创建或克隆。 如果我们想要创建一个git仓库,我们只需要使用git init
即可,git会在本文件夹下初始化一个隐藏文件夹.git
。 如果需要克隆一个仓库(本地无版本库),可以使用git clone <remote_url>
,git会获取该域名下的完整仓库到本地。
3.提交代码
首先需要使用git remote
命令管理 Git 仓库中的远程仓库。 我们通常使用以下命令
git remote -v # 列出所有已经添加的远程仓库
git remote add <remote_name> <remote_url> #添加一个新的远程仓库。指定一个远程仓库的名称和URL,将其添加到当前仓库中。
git remote rename <old_name> <new_name> # 远程仓库重命名。
git remote remove <remote_name> # 当前仓库中删除指定的远程仓库。
git remote set-url <remote_name> <new_url> # 修改指定远程仓库的 URL。
remote通常基于HTTP
和SSH
协议。 如果使用SSH
协议,需要配置SSH密钥,并将SSH公钥存储在服务器端,可以实现免密访问。 在添加了远程仓库的连接设置后,可以使用git add <file_name>
来添加需要存入暂存区的文件。 之后使用git commit -m <message>
可以将我们暂存区的修改提交到本地的仓库。 使用git push <remote_name> [<local_branch>:]<remote_branch>
可以将我们的本地仓库提交到远程仓库,这就完成了一个简单的提交流程
4.获取代码
git通过git fetch
或git pull
获取远程仓库的某一分支代码到本地。区别在于git fetch
执行完毕需要执行git merge
将远程仓库上的代码合并到本地代码,git pull
等价于上述的两个操作。
5.分支操作
分支操作的命令如下
git branch <branch_name> # 创建名为branch_name的分支
git checkout <branch_name> # 当前仓库切换到branch_name分支
git merge # 合并分支
通常来说分支操作在实际开发中非常重要,在实践中,修改往往不会直接在主分支上进行,这样可以确保主分支的代码是稳定的。当我们开始一个新功能的研发或是 bug 修复时,会先创建一个新分支,在上面进行开发、测试。完成后只需要通过git merge
合并到主分支即可。每个人都可以同时在各自的分支上进行开发、测试,并在最后进行合并,所以branch功能非常有利于团队协同开发。
6.分支管理
管理策略
在团队协作中,合理的分支管理是保证代码流畅开发的关键。这里介绍常见的Git Flow和GitHub Flow。
Git Flow比较复杂,但适合大部分项目,尤其是开发周期较长的项目。它通过多个分支来管理不同的开发任务
- master/main:用于发布稳定版本的分支,通常只有发布新版本前才会更新。
- develop:开发分支,集成所有新功能的主要分支。
- feature:功能分支,每个新功能或任务单独创建一个分支,在开发完成后合并回develop分支。
- release:用于发布版本前进行准备工作的分支,包含bug修复和代码优化。
GitHub flow,顾名思义,就是 GitHub 所推崇的 Workflow。其核心思想是所有开发都基于主分支,在开发功能呢完成并测试完成后,通过PR进行功能合并。
建议的commit策略
- 简明介绍提交的背景、目的和内容,避免模糊性的表述(如“修改了一些功能”)
- 提交应该小而集中,提高可维护性。