问题1:多人协作如何共享仓库的代码?
问题2:开源项目,如何共享给其他程序员?
上一级重点了解了把自己的项目储存到本地仓库的一些操作
接下来的操作就是工作中常用的操作了 (上传本地仓库到远程仓库,实现多人协作,共同维护项目)
重点1:远程仓库
重点2:分支操作
重点3:多人协同
【1】远程仓库(其实是网站)
1.什么是远程仓库?
远程仓库又叫做开源项目托管平台,专门用于免费存放开源项目源代码的网站
2.有哪些远程仓库?
目前世界上比较出名的开源项目托管平台有:
主要有以下 3 个:
-
Github
(GitHub: Where the world builds software · GitHub,全球最牛的开源项目托管平台,没有之一) -
Gitlab
(对代码私有性支持较好,因此企业用户较多) -
Gitee
(Gitee - 基于 Git 的代码托管和研发协作平台,又叫做码云,是国产的开源项目托管平台。访问速度快、纯中文界面、使用友好
注意:以上3个开源项目托管平台,只能托管以git管理的项目源代码,因此,它们的名字都以git开头
3.自己在码云和GitHub上面注册自己的帐号(这样远程仓库就有了)
4.开始操作了:
1)本地仓库和远程仓库建立联系
建立联系的命令:git remote add origin 远程仓库的地址
git remote -v 【查看有没有跟远程仓库建立联系】
git remote remove origin 【删除已经建立的联系】
2)把本地仓库的代码,上传到远程仓库【推送到远程仓库】重点
<1>HTTPS方式访问远程仓库
---第一次操作:
step1:准备好自己的本地仓库
step2:创建一个空白的远程仓库(+)
step3:命令行中,本地仓库和远程仓库建立联系 (复制粘贴即可) git remote add origin ...
step4:把本地仓库的代码,推送到远程仓库 (复制粘贴)git push -u origin master
---后续推送:(无非自己修改了代码或新建了文件需要重新推送)
注意:不能直接git push ,需要先将自己的文件存放带本地仓库
具体步骤如下:
step1:在本地仓库中修改文件(创建、修改内容)
step2:提交到本地仓库(工作区-->暂存区-->仓库) git add . git commit -m '.......'
step3:推送命令:把本地仓库的最新内容推送到远程仓库 git push
<2>SSH方式访问远程仓库(平时主要用这个)
使用SSH方式,会提前做一些额外的配置,然后就可以正常推送了
先了解以下SSH和HHTPS 的不同
SSH key(密钥)
SSH key
的作用:实现本地仓库和远程仓库之间免登录的加密数据传输。
SSH key
的好处:免登录身份认证、数据加密传输。(hhtps需要)
SSH key
由两部分组成,分别是:
① id_rsa
(私钥文件,存放于客户端的电脑中即可)
② id_rsa.pub
(公钥文件,需要配置到远程仓库 中)
开始配置了:
额外的配置:(只需要做一次就可以了)(匹配本地和远程的密钥)
第1步,在本机生成 SSH key
① 打开 Git Bash
② 粘贴如下的命令,并将 your_email@example.com
替换为注册 账号时填写的邮箱:
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
③ 连续敲击 3 次回车,即可在 C:\Users\用户名文件夹\.ssh
目录中生成 id_rsa
和 id_rsa.pub
两个文件
第2步,找到密钥文件 C:\Users\用户名文件夹\.ssh
目录中生成 id_rsa
和 id_rsa.pub
两个文件
第3步,配置 SSH key 复制密钥文件的内容(公钥文件id_rsa.pub
) ,到托管平台(远程仓库)进行配置 (设置。公钥中查找)
第4步,检测 SSH key
是否配置成功
在本机命令行中:
ssh -T git@github.com 或者 ssh -T git@gitee.com
执行成功后输入yes
配置完成之后就可以 将本地仓库的内容推送到远程了(和hhtps基本一致)
不同之处在于:
本地仓库和远程仓库建立关联 远程地址不一样
🆗 现在就可以把自己本地的代码推动到远程仓库了
3)克隆远程仓库到本地仓库 (本地没仓库,把远程仓库直接复制到本地)
场景:第一天进公司,经理让熟悉项目代码,这时候就需要从远程仓库中克隆代码到自己的电脑上了,自己需要的是远程仓库中项目的地址就可以了
然后执行命令:git clone 远程仓库的地址
4)拉取远程仓库的最新内容到本地仓库 git pull
所以:频繁的操作就是:推送-拉取-克隆(一次)
远程------>本地(拉取git pull)
本地------->远程(推送 git push)
接下来是本地仓库和远程仓库的的分支操作(重点)
【2】分支操作(主分支只是用于存储和记录,写代码在功能分支完成,然后再合并到主分支)
前提:多进程同步开发,多个程序员之间不能相互影响
分类:
(1)主分支master (git默认创建好的,一直存在)
--作用:保存和记录整个项目的已完成的功能代码
(2)功能分支 (用来开发新功能的分支)功能实现之后,在合并到master分支上
接下来分别介绍本地仓库中的分支操作和远程仓库中的分支操作
1.本地仓库的分支操作:
查看分支:git branch
创建分支:git branch 新分支名称 注意:基于当前分支,创建了一个副本
切换分支:git checkout 分支名称
创建并切换到新分支:git checkout -b 新分支名称
合并分支:git merge 分支名称 (先执行git checkout master 先切换到主分支)
注意:在分支上做的操作一定要先提交到仓库,然后再去合并分支
删除分支: (当把功能分支的代码合并到 master
主分支上以后,就可以删除对应的功能分支: )
git branch -d 分支名称
git branch -D 分支名称 没有执行过合并操作的分支
解决合并分支冲突:
[1] 什么情况下产生冲突? 不同的分支,对同一个文件做了不同的修改。
[2] 如何解决冲突?
第1步,跟同事一起商量,最终保留哪些代码
第2步,重新做一次提交 git add . git commit -m '解决某个功能的冲突'
所以本地仓库的分支操作过程为:
1.切换到功能分支
2.开发功能分支
3.把代码提交到本地仓库
4.合并到主分支 (先切换到主分支上,然后合并git merge 分支名称)
2.远程仓库的分支操作:
(1)把本地仓库的分支推送到远程仓库
如果是第一次将本地分支推送到远程仓库,需要运行如下的命令:
-u 表示把本地分支和远程分支进行关联,只在第一次推送的时候需要带 -u 参数
git push -u 远程仓库的别名 本地分支名称:远程分支名称
例如:git push -u origin payment:pay
如果希望远程分支的名称和本地分支名称保持一致,可以对命令进行简化
git push -u origin payment
注意:第一次推送分支需要带 -u 参数,此后可以直接使用 git push
推送代码到远程分支。
(2)查看远程仓库的分支
git remote show origin
(3)下载远程仓库分支到本地仓库
从远程仓库中,把远程分支下载到本地仓库,分支名称保持一致
git checkout 远程仓库的分支 如:git checkout pay
注意:
本地仓库没有远程仓库的这个分支,执行 git checkout 分支名,表示下载远程的这个分支
如果本地有这个分支,执行 git checkout 分支名 表示的是切换分支
从远程仓库中,把对应的远程分支下载到本地仓库,并把下载的本地分支进行重命名
git checkout -b 本地分支名称 origin/远程分支名称
例如:git checkout -b payment origin/pay
(4)拉取当前分支对应的远程分支上的最新内容,保持当前分支的代码和远程分支代码一致
git pull
(5)删除指定的远程分支
git push 远程仓库名称 --delete 远程分支名称
例如:git push origin --delete pay
(删除本地分支还记得吗? git branch -d 分支名称)
🆗,现在就是本地仓库和远程仓库的一些分支操作
接下来就是工作中多人协作
协作流程(俩字:推拉)
协作时的问题:
b和c同时需要对同一个文件做修改
【1】推送失败 (c推送失败)
原因:B先于C推送了代码到远程仓库 ,远程仓库的版本记录,高于c本地仓库的记录
解决:先拉后推(一拉又出问题)
【2】拉取冲突
问题原因:先拉后推,一拉就冲突了!
(拉取的时候,远程仓库的文件会覆盖本地仓库的文件)
解决:
1:手动绝对到底留哪些代码
2:提交到本地仓库
3:把本地仓库推送到远程仓库
4:B如果需要用此文件,需要做一次拉取
命令混淆区:
反悔操作:git checkout --index.html(工作区)撤销对文件内容的修改
切换到指定的分支(本地仓库)git checkout 分支名
创建并切换到新分支 git checkout -b 分支名
远程仓库的分支下载到本地仓库 git checkout 远程仓库分支名
取消文件的暂存 git reset HEAD 文件名
版本回退 git reset --hard <commit ID>
移除仓库文件(同时移除工作区和本地仓库)git rm -f 文件名
移除仓库文件(移除本地仓库,保留工作区)git rm --chche 文件名
本地仓库删除分支 git branch -d 分支名
远程仓库删除分支 git push origin --delete 远程仓库分支名