【Git】Git-远程仓库
二、Git
3. 远程仓库
- 总结:
- 凡是涉及到远程仓库的操作,如
clone
,push
,pull
都需要输入密码,除非自己设置有效时间免登录 - 从远程仓库克隆到本地,使用SSH密钥更好,麻烦更少
- 编辑代码也好,标签也好,分支也好,都是在本地仓库完成后推送至远程仓库,其原理都可以看成一样的
- 凡是涉及到远程仓库的操作,如
3.1 新建远程仓库
-
注册Github(Gitee)
-
创建仓库入口
-
编辑仓库信息
-
查看仓库地址
3.2 本地电脑SSH密钥生成绑定git账号
-
安装git,首先去git官网下载git,https://git-scm.com/downloads,下载.exe格式并安装。
-
从程序目录启动“Git Bash”
-
键入命令:ssh-keygen -t rsa -C "email@email.com","email@email.com"是你的github账号
-
此时,你的C:\Users\admin.ssh这个路径下会生成两个文件:id_rsa和id_rsa.pub
-
用记事本打开id_rsa.pub文件,复制内容,在github.com的网站上到ssh密钥管理页面,添加新公钥,随便取个名字,内容粘贴刚才复制的内容。
-
完成(Gitee同理)
3.3 克隆项目
-
立项:克隆远程仓库+配置身份信息+创建项目+推送项目到远程仓库
-
克隆远程仓库的命令
git clone https://github.com/Cyril-hub/git-info.git
注意:如果此步骤出现以下的报错提醒
解决方法如下:
- 命令中把https换成git
- 命令中把https换成http,虽然会提示报错,但能正常克隆
- 先输入
git config --global http.sslVerify "false"
命令,再克隆
原因如下:
- 报错中的文字有open_SSL,这是一个https的加密协议。因此,在未登录的情况下,默认不能使用https协议下载github上面的文件,否则会被协议拦截。当替换成http协议属于未加密,不会拦截下载请求
- 把https换成git可以下载,应该是github内部自定义的通信协议,所以git协议也不会拦截下载请求
- 先输入命令解除ssl验证后,再次克隆https协议便不会拦截。
- 如果是登录情况下,https协议则不会拦截,也可以下载文件。登录情况指的是配置Git的账号密码,该账号密码就是你的github账号密码,大家通常出现下载报错:fatal: unable to access ‘https:xxxx’ OpenSSL SSL_read: Connection was reset, errno 10054,一般是由于账号没有配置。
- 总结:登录账号能解决问题,原因是https协议属于加密协议,需要验证,否则不让各种git操作。把https替换成git可行是github内部自定义协议,把https替换成http可行是因为http协议属于未加密,否则需要输入命令先解除ssl验证。
克隆远程仓库到本地
克隆后本地文件内容
-
配置身份信息
进入本地文件后,输入相关命令
git config user.name 'xxxx' git config user.email 'xxxx@xxx.com'
配置后的信息位置如下
-
创建项目
-
推送项目到远程仓库
推送命令
# 工作区添加到暂存区 git add . # 暂存区提交到仓库去 git commit -m '立项' # 推送到远程仓库 git push
推送后在github上查看
注意:
- 使用https协议克隆项目到本地会出现很多麻烦,以后还是使用ssh密钥进行克隆。
- 使用ssh进行克隆后,在git push 和 pull都需要手动输入密码,如果要避免这样的麻烦,可以在git bash键入命令
$ ssh-keygen -p
,在设置密码的时候回车即可。
-
3.4 协同开发项目
-
当不同的客户端从远程仓库克隆项目后进行身份信息的配置后,即可协同开发一个项目
-
张三与经理的协同开发
-
张三
-
经理
-
-
通过不断地循环交替同步与提交,实现协同开发项目
-
总结:
- 要使用git命令操作仓库,需要进入到仓库内部
- 要同步服务器代码就执行:
git pull
- 本地仓库记录版本就执行:
git commit -am '版本描述'
- 推送代码到服务器就执行:
git push
- 编辑代码前要先
pull
,编辑完再commit
,最后推送是push
3.5 代码冲突
- 多人协同开发,避免不了代码冲突的情况,由于多人同时修改同一个文件,这将导致开发被影响进度。一旦出现代码冲突,先解决后再继续后续开发。
- 解决冲突:
- 原则:谁冲突谁解决,并且一定要协商解决
- 方案:保留所有代码 或者 保留某一人代码
- 解决完冲突代码后,依然需要
add
、commit
、push
- 减少冲突的操作方式
- 养成良好的操作习惯,先
pull
在修改,修改完立即commit
和push
- 一定要确保自己正在修改的文件是最新版本的
- 各自开发各自的模块
- 如果要修改公共文件,一定要先确认有没有人正在修改
- 下班前一定要提交代码,上班第一件事拉取最新代码
- 一定不要擅自修改同事的代码
- 养成良好的操作习惯,先
3.6 标签
-
当某一个大版本完成之后,需要打一个标签。其作用是记录大版本,备份大版本的代码。
-
模拟经理打标签
-
进入经理本地仓库
cd Desktop/manager/git-info
-
经理在本地打标签
git tag -a 标签名 -m '标签描述' 例: git tag -a v1.0 -m 'version 1.0'
-
经理推送标签到远程仓库
git push origin 标签名 例: git push origin v1.0
-
查看打标签结果
-
补充:删除本地和远程标签
# 删除本地标签 git tag -d 标签名 # 删除远程仓库标签 git push origin --delete tag 标签名
-
3.7 分支
-
分支的作用:
- 区分生产环境代码以及开发环境代码
- 研究新的功能或者攻关难题
- 解决线上bug
-
分支的特点:
- 项目开发中公用分支包括master、dev
- 分支master是默认分支,用于发布,当需要发布时将dev分支合并到master分支
- 分支dev是用于开发的分支,开发完阶段性的代码后,需要合并到master分支
-
模拟经理分支操作
- 对比:操作分支前的代码
-
进入经理本地仓库
cd Desktop/manager/git-info
-
查看当前分支
git branch
注意:没有创建其他分支时,只有
master(main)
分支 -
经理创建并切换到dev分支
git checkout -b dev
-
设置本地分支跟踪远程指定分支(将分支推送到远程)
git push -u origin dev
执行这一步后,在远程仓库才能看到新的分支
-
经理在本地dev分支编辑代码并推送至远程仓库dev分支
-
将dev分支合并到master分支
-
提示:只有当dev分支合并到
master(main)
分支成功,张三才能获取到num3
-
先切换到
master(main)
分支git checkout main
-
dev分支合并到
master(main)
分支git merge dev
-
经理推送合并分支操作到远程仓库(推送至远程仓库)
# 合并分支默认在本地完成,合并后直接推送即可 git push
-
-
-
张三同步经理合并后的
num3