1 版本控制
版本控制(Version Control)是一种用于管理和跟踪文件或代码的变化历史的系统。它使得多人协作开发变得更加高效,同时也提供了一种备份和恢复文件的方式。版本控制可以追踪每个文件的修改,记录修改的作者、时间和内容,并且能够方便地回退到历史版本或者将不同版本进行合并。
2 版本控制工具
版本控制工具(Version Control Tools)是用于实施版本控制的软件工具或平台。它们提供了一系列命令行或图形界面的功能,帮助用户管理文件的版本。
2.1 Git(分布式版本控制)
Git 是目前最流行的分布式版本控制系统。它是由Linus Torvalds为了管理Linux内核开发而创建的。Git 可以跟踪文件的每个修改,并将这些修改保存为一个称为“提交”的快照。它具有强大的分支和合并功能,可以支持大规模的多人协作开发。
2.2 SVN(集中式版本控制)
SVN(Subversion) 是一种集中式版本控制系统,与Git相比,它的工作方式略有不同。SVN 使用一个集中的服务器存储所有的文件版本,并且用户需要通过网络连接到服务器才能进行版本控制操作。再者,所有数据都保存在单一的服务器上,有很大的风险这个服务器会损坏,这样就会丢失所有的数据,当然可以定期备份。SVN 提供了类似于Git的基本功能,如版本回退、分支和合并等。
3 Git
3.1 Git基本理论
首先,Git和Linux是同一个人开发的,故在Git Bash中可以使用linux命令。
Git Bash中复制快捷键:ctrl + insert,粘贴快捷键:shift + insert。
Git一共有四个工作区域。三个本地工作区域:工作区(Workspace)、暂存区(Stage / Index)、资源库(Repository / Git Directory)。一个远程工作区域:远程git仓库(Remote Directory)。
- Workspace:工作区,就是平时存放项目代码的地方。
- Index / Stage:暂存区,用于临时存放你的改动,事实上它只是一个文件,保存即将提交到文件列表信息。
- Repository:仓库区(或本地仓库),就是安全存放数据的位置,这里面有你提交到所有版本的数据。其中HEAD指向最新放入仓库的版本。
- Remote Directory:远程仓库,托管代码的服务器,如Github、Gitee等平台。
文件在这四个区域之间的转换关系如下:
3.2 Git配置命令(配置一次即可)
配置完一次后就不需要再配置了。
查看Git配置文件(都在本地)。这部分命令不重要:
# 查看所有配置文件
git config -l
# 查看系统配置文件
git config --system --list
# 查看当前用户配置文件
git config --global --list
Git相关的配置文件的具体位置:
- 系统配置文件:D:\Git\etc.gitconfig
- 用户配置文件:C:\Users\Administrator.gitconfig
可以直接编辑配置文件,通过命令设置后会响应到这里。为了以后能够更好地进行协同开发,标识自己的身份,需要对用户配置文件的用户名和密码(邮箱)进行配置,否则不能上传代码。这部分命令重要:
git config --global user.name "jundong.yao" # 用户名
git config --global user.email "jundong2000@126.com" # 邮箱
配置完成后即可发现用户配置文件中出现了用户名和邮箱。
3.3 Git常用命令(创建项目)
windows系统需要手动进入项目目录中,右键点击“Git Bash Here”,之后执行以下操作:
# 设置用户签名
git config --global user.name 用户名
# 设置用户签名
git config --global user.email 邮箱
# 初始化本地库
git init
# 查看本地库状态
git status
# 添加到暂存区
git add 文件名
# 提交到本地库
git commit -m "日志信息" 文件名
# 删除commit
# 查看简洁历史记录
git reflog
# 查看详细历史记录
git log
# 版本穿梭
git reset --hard 版本号
# 清理暂存区
git reset
如果对整个项目提交:
git add .
git commit -m '日志信息'
如果只提交某个文件:
git add hello.txt #文件名
git commit -m "日志信息" hello.txt # 文件名
忽略文件.gitignore文件
有些时候我们不想把某些文件纳入版本控制中,比如数据库文件,临时文件,日志文件等,则可以在本地文件的主目录下创建".gitignore"文件。
Python以及其他语言的建议".gitignore"文件以下链接已给出,可以直接用:
https://github.com/github/gitignore/blob/main/Python.gitignore
3.4 Git分支命令
分支在公司中很重要。在公司中服务器分为多套服务器(开发环境、测试环境、生产环境),比如说开发人员在开发环境中开发,用户在生产环境中使用。因此,在版本控制过程中,需要同时推进多个任务,为每一个任务可以单独创建一个分支。对于开发人员来说,分支可以把自己的工作从主线上分离开来,开发自己分支的时候不影响主线分支的运行。分支也是和版本号一样,通过指针引用来实现的。
分支的好处:
- 同时推进多个功能开发,提高开发效率。
- 分支之间没有依赖关系,互不影响,其中一个分支开发失败不会对其他分支产生任何影响。
# 创建分支
git branch 分支名
# 查看分支
git branch -v
# 切换分支
git checkout 分支名
# 把指定分支合并到当前分支上
git merge 分支名
合并分支说明:如果想把hot-fix分支合并到master分支上,(也就是要把hot-fix分支的代码合并到master分支上)必须处于master分支上,执行下面的命令:
git merge hot-fix
合并时还可能产生冲突:
合并分支时,两个分支在同一个文件的同一个位置有两套完全不同的修改,Git无法替我们决定使用哪一个,必须人为决定新的代码。
# 首先进入提示中的出现冲突的文件中
# 对冲突的部分进行手动修改成自己想要的部分
# 修改后还要提交代码到本地仓库
git add hello.txt
git commit -m "merge test" # 注意这里不要加文件名hello.txt,直接选择省略
3.5 Git团队协作(远程仓库)
需要用到代码托管中心,即远程仓库(github, gitee, gitlab),本博客以gitee为例来讲。
分为两种情况:
- 团队内协作
- 跨团队协作(略)
3.5.1 SSH免密登录
首先需要设置本机绑定SSH公钥,实现免密登录!(挺重要,方便,只需设置一次)
# 进入 C:\Users\Administrator\.ssh 目录
# 生成公钥
ssh-keygen -t rsa # 加密算法
执行完上述命令后,打开目录C:\Users\Administrator.ssh下的的"id_rsa.pub"(公钥)文件,将公钥信息 public key 字符串复制下。然后粘贴到自己github/gitee账户中设置中的SSH选项中即可。
github:
gitee:
3.5.2 创建远程仓库(github, gitee)
之后便是创建一个自己的远程仓库,假设仓库网址为:https://gitee.com/yaojundong/dev_test.git
远程仓库命令:
# 查看当前所有远程地址别名
git remote -v
# 给远程仓库起别名
git remote add 别名 远程地址
# 修改远程仓库别名
git remote rename 原始仓库名 新仓库名
# 删除远程仓库
git remote rm origin # 别名
# 推送本地分支上的内容到远程仓库(可以用来创建新的远程分支)
git push 远程仓库地址别名 本地仓库分支名(:远程分支名)
# 将远程仓库的内容克隆到本地
git clone 远程仓库地址
# 将远程仓库对于分支最新的内容拉取下来,后与当前本地分支直接合并
git pull 远程仓库地址别名 远程仓库分支名(:本地分支名)
git pull origin master --allow-unrelated-histories # 第一个pull可能要这样
克隆所做的三件事:
- 复制代码到本地
- 初始化项目
- 直接创建别名(默认是origin)
推送相关设置
# 将本地分支与远程分支进行关联,建立跟踪关系(后续就不用添加本地仓库分支名了,但是只能是push设置)
git push -u 别名 本地仓库分支名
# 强制推送,覆盖远程仓库中的同名分支
git push -f 别名 本地仓库分支名