一、远程仓库
在之前的课程中,我们执行过一次往github远程推送版本,
命令: git push -u origin master
这条命令中,origin其实就是远程仓库的默认别名,也就是说,git push
的只要是origin
,那肯定就是往远程仓库去推送了,-u
的意思是执行过一次这个之后,以后就可以直接输入 git push
了,默认就是 git push origin master
。至于这个master
的意思就是分支,当然分支的概念我们后面专门再做解释。
回到这个origin,其实我们可以通过命令对远程仓库进行管理
1、查看远程仓库名字
git remote
2、查看远程仓库的地址
git remote -v
3、修改远程仓库名字
git remote rename origin neworigin
4、添加一个远程仓库
git remote add 新远程仓库名 远程地址
5、设置指定仓库地址
git remote set-url 远程仓库名 远程地址
6、删除远程仓库名
git remote rm 远程仓库名
7、push代码到远程仓库
git push origin master
讲解上面这个主要是让大家认识到origin
这个单词的含义,一般情况下,不需要我们去对这个名字就行管理,只是有时候,可能在推送的时候,和远程仓库链接出现问题,那么我们需要检查一下自己本地的远程仓库地址是否设置有问题
由于之前课程的演示中,只是推送过一次远程代码,所以,github远程还是这样的代码
现在我们把之前的代码提交,并推送到远程
二、设置项目贡献者
之前的项目,我们都是一个人在开发,相当于,这个项目只有一个贡献者,项目肯定是需要多人共同开发的。所以,我们需要添加新的项目贡献者
1、在github网站添加新的贡献者
2、发送邀请链接
3、贡献者着接受邀请
三、新的贡献者的相关操作
1、克隆项目
2、修改项目并提交版本
修改本地login.html 加入代码:
......
<form action="" method="POST">
<div>
<label for="username">用户名:</label>
<input type="text" name="username" id="username">
</div>
<div>
<label for="pwd">密 码:</label>
<input type="text" name="pwd" id="pwd">
</div>
</form>
......
git操作:
3、远程库版本
四、拉取远程库代码
由于现在是多人开发了,每个贡献者,都会往远程库中上传新的版本,所以,最佳实践是:每个贡献者在自己开发之前,应该先从服务器拉取最新的版本,保证本地版本与服务器版本一致。
使用命令: git pull origin master
下面是动画流程演示:
五、解决冲突
既然现在是多人合作开发,那肯定就可能存在冲突的情况了,最常见的情况是:当有人修改某个文件,提交了新的版本到远程仓库,但是另外的人没有从远程拉取最新的版本,而是在自己之前的版本上,也修改了同样的文件,当这个人提交的远程的时候,就会发生冲突的问题了
我们来模拟一下这个场景:
1、YIFer这个人修改login.html的样式,并提交版本到了远程仓库
<style>
body{
background-color: rgb(131,175,155);
}
</style>
2、yanhongzhi422
也修改了login.html的背景,同时还设置了字体大小
<style>
body{
background: rgb(252, 157, 152);
font-size: 14px;
}
</style>
注意:现在的问题是,yanhongzhi422
没有与远程同步,而是直接修改了与YIFer
这个人同样的文件login.html
,这样,在yanhongzhi422
提交的时候就会出现问题
3、解决冲突
首先你要清楚,出现冲突的最大原因,是你没有按照项目开发正规的流程去走,所以才带来了这些麻烦,所以,在合作开发的时候就需要注意这些问题
(1)、在开发之前先拉取远程库内容 (2)、注意看注释,项目组人员当修改了大家都会用到的公共文件时,应该注释写清楚
如果已经出现了冲突,要么直接放弃你的内容。如果不是,那么只能手动解决这些冲突,接下来,应该先讨论,比如这里的背景到底是用YIFer提交的绿色,还是使用yanhongzhi422修改的红色。字体需不需要修改,这种有冲突的地方,是需要大家商量,得到一致意见之后再合并修改,最后再提交到远程库,形成新的远程库版本
我们之前使用的命令:
git pull origin master
git pull
其实是git fetch与git merge两个命令的合成体,表示从远程拉取并合并,现在我们希望看清楚冲突在哪里,最好可以使用更加清晰的命令
(1)、git fetch:相当于是从远程获取最新版本到本地,不会自动合并。
git fetch origin master
(2)、通过log日志比较本地master分支与远程master分支的区别
git log master origin/master
(3)、git merge
手动把远程master分支和本地master分支合并
git merge origin/master
执行之后,我们的代码就变成了这样
在符号
<<<<<<< HEAD
=======
中间的代码,是我们自己本地版本的代码
在符号
=======
>>>>>>> origin/master
中间的代码,是远程仓库拉取下来的代码
这个时候,就只需要我们自己商讨好,然后保留需要的代码,然后重新再提交就可以了
经过讨论,保留了yanhongzhi422的版本,然后我们再重新提交
到github网站上,可以看到这样的信息
下面是动画演示执行过程:
六、开源项目的协作
之前的演示是多人在同一项目中的合作,在github上还支持对于开源项目的修改提交
注意,下面演示的和一般项目开发无关了,这里的操作的意思是:你在github网上看到了很不错的开源项目,你拿下来自己使用起来不错,但是在使用期间发现了问题,并修复了这些问题。然后你把这些问题提交给了原作者,原作者发现你的提交建议之后,接收了你的更改建议
开源项目通常是没有写入的权限的,我们需要换一种协作方式参与到这些开源项目中
为了方便演示,我们又登录了一个新的github账号 yingside
,通过项目查找,找到了git-demo1项目
1、查找git-demo1项目
2、fork该工程到你自己的github仓库
3、yingside用户拷贝项目到本地
4、修改代码,并提交
在login.html页面添加了登录与取消按钮
......
<div>
<button type="submit">登录</button>
<button type="button">取消</button>
</div>
......
修改后,提交并推送到远程库:
查看远程库:
这个时候,你觉得这段修改不错,于是把这次修改推送给了原作者yanhongzhi422
5、提交 pull request
6、yanhongzhi422
用户登录之后,收到相应的pull request
请求
7、整合代码
项目中已经应用了yingside
用户的提交
8、拉取代码
下面是动画流程演示:
Comments