在软件开发行业,主流存在着两种版本控制工具,git 和 svn,由于svn存在着一些问题,渐渐的现在市面上,git成为了主流,git也成为开发人员必备的基础技能,会不会用git,能不能熟练使用git,也是企业考察的一个重点。
git是linux之父Linus Torvalds (林纳斯·托瓦兹)开发的,据传Linus 只用了两周就开发出了git,并发布了稳定版本,一个月之内,git就已经用于linux的源码的管理了。
版本控制是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统。
代码备份 本地代码仓库远程代码仓库 版本控制 随时切换版本各个版本之间互不干扰 协同工作 合并代码解决冲突回退代码代码追踪提交记录提交说明 代码变动 SVN是集中式版本控制系统,版本库是集中放在中央服务器的,而开发人员工作的时候,用的都是自己的电脑, 所以首先要从中央服务器下载最新的版本,然后开发,开发完后,需要把自己开发的代码提交到中央服务器。
问题:
一旦svn服务器出故障,svn无法切换版本,无法提交(工作中,多版本切换是常态)硬盘损坏,所有版本的代码都丢失,本地不一定有所有版本的代码svn合并代码不友好,新手很容易误删别人的代码 Git是在2005年,Linux系统的创建者Linus Torvalds 为了帮助全球的开发者,维护Linux系统内核的开发 而开发了自己的开源分布式版本控制工具 。
分为两种类型的仓库:本地仓库和远程仓库。
git完美解决了svn遇到的问题,成为了现在主流的版本控制管理工具。
官网下载地址:https://git-scm.com/downloads
安装完成后在电脑桌面(也可以是其他目录)点击右键,如果能够看到如下两个菜单则说明Git安装成功。
Git GUI:Git提供的图形界面工具Git Bash:Git提供的命令行工具运行Git命令客户端,使用git --version 命令,可以查看git版本
小知识点:git命令客户端,是linux命令,可以使用它练习一下linux命令,比如
1. cat : 查看文件 2. ll : 文件列表 等同于 ls -l 3. mv: 移动文件到指定目录 4. cp:拷贝文件到指定目录 5. vim:编辑文件一般在工作中还是使用图形化界面多一些。
双击安装包,进入安装向导界面
一路next
选择安装目录
安装
配置
配置 https://gitee.com/ 上的用户名和账号
安装中文语言包
TortoiseGit-LanguagePack-2.9.0.0-64bit-zh_CN.msi
进入设置
3. 选择中文,点击应用并确认
完成Sourcetree
Git分为本地仓库和远程仓库。
步骤:
创建工作目录、初始化本地 git 仓库
新建一个 test.txt 文件(暂不执行添加操作)
使用 status 命令,查看状态
使用 add 命令添加,并查看状态
使用 commit 命令,提交到本地历史仓库
使用 log 命令,查看日志
修改 test.txt 文件
添加并提交,查看日志
步骤:
创建工作目录、初始化本地 git 仓库
新建一个 test.txt 文件(暂不执行添加操作)
使用 status 命令,查看状态
使用 add 命令添加,并查看状态
使用 commit 命令,提交到本地历史仓库
使用 log 命令,查看日志
修改 test.txt 文件
添加并提交,查看日志
在多个提交的版本记录中,可以任意的切换
步骤:
查看 my_project 的 log 日志
使用 git reflog:可以查看所有分支的所有操作记录(包括已经被删除的 commit 记录的操作)增加一次修改记录
将代码切换到第二次修改的版本
指令:git reset --hard 版本唯一索引值
⚫ 分支的使用场景
周期较长的模块开发 假设你准备开发一个新功能,但是需要一个月才能完成第一周写了20%的代码,突然发现原来已经写好的功能出现了一个严重的Bug那现在就需要放下手中的新功能,去修复Bug但这20%的代码不能舍弃,并且也担心丢失这就需要开启一个新的版本控制。 尝试性的模块开发 业务人员给我们提出了一个需求经过我们的思考和分析 该需求应该可以使用技术手段进行实现但是我们还不敢确定我们就可以去创建一个分支基于分支进行尝试性开发。使用分支管理可以有效的避免污染主线分支或者上线分支,从而造成一些不必要的麻烦
由每次提交的代码,串成的一条时间线
Master是所在分支的名称,一般不可修改Head是指向分支的指针Dev是另一个分支的名称,可随意定义 工作中分支定义: Master(主分支,一般用作上线分支)Dev(开发分支,又叫做测试分支,开发阶段使用,开发完成并测试完成后,合并到主分支)开发人员分支(开发人员从Dev拉取的分支,用于开发阶段使用,功能开发完成后,合并到Dev分支,供测试人员测试)合并分支:git merge 分支名
切换到master分支
将xiaoming 分支合并到master
完成合并,查看日志
删除命令:git branch -d 分支名
查看分支列表:git branch --list
操作情况
情况1:先有本地项目,远程为空 步骤 创建本地仓库创建或修改文件,添加(add)文件到暂存区,提交(commit)到本地仓库创建远程仓库推送到远程仓库 情况2:先有远程仓库,本地为空 步骤 将远程仓库的代码,克隆到本地仓库 克隆命令:git clone 仓库地址 创建新文件,添加并提交到本地仓库推送至远程仓库项目拉取更新 拉取命令: git pull 远程仓库名 分支名注册码云账号
创建仓库
将本地代码推送到远程:
在推送之前,需要先将本地代码和远程仓库代码关联:
git remote add<name> <url>2. 推送 git push<name>
发现报错,git@gittee.com:Permission denied
没有权限。
和远程仓库关联有两种方式:
ssh方式
使用ssh方式,需要配置SSH公钥http方式
使用http方式,不需要配置SSH公钥
使用http方式 会弹出用户密码输入框,输入gitee的账号密码即可,下次可直接使用,git会进行记忆存储
4. 注意:如果是idea项目提交,注意在本地目录添加.gitignore,将不相关的文件,目录等排除在提交之外
*.iml .idea/ *.ipr *.iws .idea_modules/ target/ *.project pom.xml.tag pom.xml.releaseBackup pom.xml.versionsBackup pom.xml.next release.properties dependency-reduced-pom.xml buildNumber.properties .mvn/timing.properties注意:在从本地提交项目前,不要在gitee上,编辑文件,并提交,这样会造成本地和远端版本来源不一致,导致无法提交
解决方案是:强制拉取最新的代码,在提交,强制拉取代码命令:git pull origin master --allow-unrelated-histories
使用ssh方式,需要配置SSH公钥
生成SSH公钥步骤 :
设置Git账户
查看git账户 : git config user.name查看git邮箱:git config user.email设置全局账户名和邮箱: git config --global user.name “账户名” git config --global user.email “邮箱”查看是否生成过SSH公钥 :cd ~/.ssh生成SSH公钥
命令: ssh-keygen –t rsa –C “邮箱”设置账户公钥
id_rsa.pub 就是公钥
查看公钥命令:cat ~/.ssh/id-rsa.pub
设置码云账户公钥(在设置里面)
公钥测试
命令:ssh -T git@gitee.com步骤 :
为远程仓库的URL(网址),自定义仓库名称 git remote add 远程名称 远程仓库URL 推送 git push -u 仓库名称 分支名情况2:先有远程仓库,本地为空
步骤
将远程仓库的代码,克隆到本地仓库
克隆命令:git clone 仓库地址(仓库地址 使用ssh地址和http地址都可以)创建新文件,添加并提交到本地仓库
git add hello.txtgit commit -m ‘hello.txt’推送至远程仓库
git push -u origin master (git push -u 远程仓库名 分支名)
项目拉取更新 拉取命令:
git pull 远程仓库名 分支名 代码冲突产生的原因:
将test.txt的内容 更改为update count=2
远端test.txt的内容 更改为 update count=3
本地提交: 因为本地代码和远程仓库中的代码不一致,且是同一文件,造成了冲突
如何解决?
先使用拉取命令:git pull
打开冲突文件test.txt
HEAD代表本机版本,17719a0a26a1f29e0ce9b499d7d39a2190b4799c 代表远端版本 中间使用======分隔
选择要使用的版本,此时我们选择本机的代码为要最终提交的代码
5. 提交,先git add, 然后 git commit 提交到本地,然后git push 推送到远端
2. Version Control — Git — 指定git.exe存放目录 3. 点击 Test 测试
打开工程
创建本地仓库
关联git
创建.gitignore文件
*.iml .idea/ *.ipr *.iws .idea_modules/ target/ *.project pom.xml.tag pom.xml.releaseBackup pom.xml.versionsBackup pom.xml.next release.properties dependency-reduced-pom.xml buildNumber.properties .mvn/timing.properties提交代码
查看日志 使用revert来进行历史版本的切换
在这里插入图片描述 Revert 操作会当成一个新的提交记录 这种回退的好处在于,如果后悔了“回退”这个操作 也可以回退到没有回退之前的版本 因为历史记录还保留提交记录
创建并切换分支
可以切换回master
分支合并 master合并dev01的内容
有冲突,点击Merge解决冲突 解决完冲突,点击Apply 4. 分支删除
1.