目录
3.6 git操作之pull拉取远程指定分支以及push推送到远程指定分支
1. 什么是ssh key
我理解的就是每台电脑上会产生出一个ssh key,然后自己有一个远程账户,但是自己有可能有很多台电脑,包括家里的电脑还有公司的电脑,我们可以在任意一台电脑上工作,但是如果想要每台电脑都和远程版本库时刻保持着通讯,就需要将每台电脑的ssh key添加到远程账户,添加到远程版本库之后,远程版本库就会和已经添加的电脑进行通讯而不会和其他电脑进行通讯
- 建议:所有的Git操作都通过ssh key进行,因为简单
2. git/github生成密钥并通过
- 操作分为本地电脑配置和github网站配置
2.1 第一步:本地电脑配置
- 右键空白处,选择Git Bash Here打开相关命令窗口
1.配置用户名和邮箱(如果已经配置,就跳过)
git config --global user.name 用户名
git config --global user.email "邮箱"
之后就会在C:\Users\Administrator下创建一个.gitconfig文件,内容为
[user]
name = xxx
email = xxx@xxx.com
- 注1:username和email即github的登陆帐号和注册邮箱
- 注2:git config命令的–global参数,用了这个参数,表示你这台机器上所有的Git仓库都会使 用这个配置
2.1.1 检查下自己之前有没有已经生成ssh
cd ~/.ssh
ls
- 注1:当cd ~/.ssh命令执行后窗口返回“no such file or directory”的时候,表示我们的电脑并 没有ssh key,所以需要我们创建ssh key
- 注2:~表示当前用户的目录,比如我的是:C:\Users\Administrator
- 注3:ls命令执行后,如果本地有ssh秘钥的话会有id_rsa.pub,config,known_hosts等文件
2.1.2 生成(或删除)秘钥
ssh-keygen -t rsa -C "你注册时的邮箱" //这里的邮箱要换成自己注册时的邮箱
- 接着按3个回车即可。
- 注1:如果本地有ssh,执行以上命令会出现正面的提示,这里选择y,表示覆盖本地的ssh key,其实也就是ssh秘钥删除的意思
- 注2:为什么要删除秘钥,创建SSH的时候设置过密码,那就很有可能git操作时出现忘记密码的尴尬情况,不要想着怎么重新修改密码了,选择重新创建一个ssh秘钥
- 注3:创建ssh key不要输入密码了,不然操作起来太累~~~~~~~
- 注4:使用-f参数可以指定生成ssh-key的文件名ssh-keygen -t rsa -C "xxxxxxx@qq.com" -f "github_id_rsa"
2.1.3 4.执行命令完成后,默认会在window的C:\Users\Administrator\.ssh下面生成如下两个名称的文件:
C:\Users\Administrator\.ssh
id_rsa(私钥,不能泄露出去)
id_rsa.pub(公钥)
known_hosts(不用管)
2.2 第二步:远程github仓库配置
1.登陆到自己的gitbub,点击右上角的倒立小三角形。选择 settings
2.选择SSH and GPG keys
3.点击右边的New SSH key
4.随意填入一个title然后 key 中粘贴刚才复制的id_rsa.pub文本点击 Add key 这样就大功告成
5.github官网有时间会要你输入登陆密码才能添加ssh key。输入密码即可
2.3 测试SSH连接
- 输入测试命令
命令: ssh -T git@github.com
如果显示如下内容,表示ssh key添加成功:
Hi xxx! You've successfully authenticated, but GitHub does not provide shell access.
- 小结:https 和 SSH 的区别:
1.前者可以随意克隆github上的项目,而不管是谁的;而后者则是你必须是你要克隆的项目的拥有者或管理员,且需要先添加 SSH key ,否则无法克隆。
2.https url 在push的时候是需要验证用户名和密码的;而 SSH 在push的时候,是不需要输入用户名的,如果配置SSH key的时候设置了密码,则需要输入密码的,否则直接是不需要输入密码的。
3. 分支
3.1 Git分支和标签的命名规范
1.分支
dev/test/pre/pro(即master)2.标签
Tag格式: 主版本号.次版本号.修订号-类型标签,其中类型标签可为:alpha、beta、rc、r。
Tag示例:1.0.0-alpha、1.0.0-beta、1.0.0-rc、1.0.0-r注1:有的公司在版本命名时,前面加v,“-”替换成“_”,更加详细一点还可以在修订号后面添加发布日期
v1.0.0.191220_alpha,这都是可以的3.分支与标签的关系
dev-->alpha
test-->beta
pre-->rc
pro-->r
3.2 分支在实际中有什么用呢?
假设你准备开发一个新功能,但是需要两周才能完成,第一周你写了50%的代码,
如果立刻提交,由于代码还没写完,
不完整的代码库会导致别人不能干活了。如果等代码全部写完再一次提交,
又存在丢失每天进度的巨大风险。怎么办?
现在有了分支,就不用怕了。你创建了一个属于你自己的分支,别人看不到,还继续在原来的分支上正常工作,
而你在自己的分支上干活,想提交就提交,直到开发完毕后,再一次性合并到原来的分支上,这样,既安全,又不影响别人工作
3.3 四个环境以及各自的功能特点
- 四个环境分别是:dev、test、pre、pro(master),中文名字:开发环境、测试环境、灰度环境、生产环境
dev环境:开发环境,外部用户无法访问,开发人员使用,版本变动很大。
test环境:测试环境,外部用户无法访问,专门给测试人员使用的,版本相对稳定
pre环境:灰度环境,外部用户可以访问,但是服务器配置相对低,其它和生产一样。
pro(master)环境:生产环境,面向外部用户的环境,连接上互联网即可访问的正式环境。
3.4 分支策略
在实际开发中,我们应该按照几个基本原则进行分支管理:
1.首先,pro分支(即master)应该是非常稳定的,也就是仅用来发布新版本,平时不能在上面干活;2.那在哪干活呢?干活都在dev分支上,也就是说,dev分支是不稳定的,到某个时候,比如1.0版本发布时,再把dev分支合并到master上,在master分支发布1.0版本
3.修复bug时,我们会通过创建新的bug分支(即test)进行修复,然后合并,最后删除;
4.当手头工作没有完成时,先把工作现场git stash一下,然后去修复bug,修复后,再git stash pop,回到工作现场
3.5 分支相关命令
1. 查看分支
git branch //查看本地分支
git branch -a //查看远程分支
2. .创建分支
git branch name //仅仅保存本地,远程还需要push
git push <远程仓库名> <本地分支名>:<远程分支名>
3. 切换分支
git checkout name
4. 创建+切换分支
git checkout -b name
5. 合并某分支到当前分支
git merge name
- 注意:当Git无法自动合并分支时,就必须首先解决冲突。解决冲突后,再提交,合并完成。
使用用git log --graph命令可以看到分支合并图。
6. 删除分支(分本地和远程)
git branch //查看本地分支
git branch -d name //删除本地分支git branch -a //查看远程分支
git push origin --delete dev //删除远程分支
7. 重命名本地分支,并提交到远程
1.重命名
git branch -m oldBranchName newBranchName
2.删除远程分支
git push origin :oldBranchName
3.将重命名过的分支提交
git push origin newBranchName
- 1.git branch -m 要改的本地分支名 修改后的分支名(修改本地分支)
- 2.git push origin :远程修改前的分支名(删除远程分支)
- 3.git push origin 修改后的分支名:修改后的分支名(push 到远程分支)
- 4.git branch --set-upstream 修改后的分支名 origin/修改后的分支名(绑定远程分支)
3.6 git操作之pull拉取远程指定分支以及push推送到远程指定分支
1. pull操作
1.将远程指定分支 拉取到 本地指定分支上
git pull <远程仓库名> <远程分支名>:<本地分支名>
2.将远程指定分支 拉取到 本地当前分支上:
git pull <远程仓库名> <远程分支名>
3.将与本地当前分支同名的远程分支 拉取到 本地当前分支上
git pull <远程仓库名>
- 在克隆远程项目的时候,本地分支会自动与远程分支建立追踪关系,可以使用默认的origin来替代远程仓库名,所以我常用的命令就是 git pull origin <远程仓库名>,操作简单安全可控。
2. push操作
1.将本地当前分支 推送到 远程指定分支上(注意:pull是远程在前本地在后,push相反)
git push <远程仓库名> <本地分支名>:<远程分支名>
2.将本地当前分支 推送到 远程指定分支上
git push <远程仓库名> <远程分支名>
3.将本地当前分支 推送到 与本地当前分支同名的远程分支上
git push <远程仓库名>
- 推荐使用第2种方式,git push origin <远程分支名>
3.7 Git如何给branch打tag
发布一个版本时,我们通常先在版本库中打一个标签(tag),这样,就唯一确定了打标签时刻的版本。将来无论什么时候,取某个标签的版本,就是把那个打标签的时刻的历史版本取出来。所以,标签也是版本库的一个快照
1.查看所有标签
git tag
- 注1:标签不是按时间顺序列出,而是按字母排序的可以用git show <tagname>查看标签信息
2.创建tag
2.1 首先,切换到需要打标签的分支上,例如:dev,再创建标签
git branch //查看全部本地分支
git checkout dev //切换到本地dev分支
git tag 1.0.0-alpha //创建tag
2.2 推送标签到远程
git push origin 1.0.0-alpha
- 注1:因为创建的标签都只存储在本地,不会自动推送到远程,还需要手动推送
2.3 git标签分为两种类型:轻量标签和附注标签,区别:附注标签带注解
git tag 1.0.0-alpha //创建轻量标签
git tag -a 1.0.0-alpha -m "一期开发完成" //创建附注标签
3. 删除tag
3.1 删除本地tag
git tag -d 1.0.0-alpha
- 注1:因为创建的标签都只存储在本地,不会自动推送到远程。所以标签可以在本地直接删除
3.2 删除远程tag
- 如果标签已经推送到远程,要删除远程标签就麻烦一点,先从本地删除
git tag -d 1.0.0-alpha
然后,再从远程删除。删除命令也是push,但是格式如下:
git push origin :refs/tags/1.0.0-alpha
加油!每天给自己打气!!!!!!