08月10, 2019

# 手把手跟我做Git系列(四)-- 远程管理

一、远程仓库

在之前的课程中,我们执行过一次往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远程还是这样的代码 -w1001

现在我们把之前的代码提交,并推送到远程 -w814

二、设置项目贡献者

之前的项目,我们都是一个人在开发,相当于,这个项目只有一个贡献者,项目肯定是需要多人共同开发的。所以,我们需要添加新的项目贡献者

1、在github网站添加新的贡献者

-w1075

2、发送邀请链接

-w1064

3、贡献者着接受邀请

-w1271 -w510

三、新的贡献者的相关操作

1、克隆项目

-w736

2、修改项目并提交版本

修改本地login.html 加入代码:

......
<form action="" method="POST">
    <div>
        <label for="username">用户名:</label>
        <input type="text" name="username" id="username">
    </div>
    <div>
        <label for="pwd">密&nbsp;&nbsp;&nbsp;码:</label>
        <input type="text" name="pwd" id="pwd">
    </div>
</form>
......

git操作:

-w962

3、远程库版本

-w1004

四、拉取远程库代码

由于现在是多人开发了,每个贡献者,都会往远程库中上传新的版本,所以,最佳实践是:每个贡献者在自己开发之前,应该先从服务器拉取最新的版本,保证本地版本与服务器版本一致。

使用命令: git pull origin master

-w616

下面是动画流程演示: git_pul

五、解决冲突

既然现在是多人合作开发,那肯定就可能存在冲突的情况了,最常见的情况是:当有人修改某个文件,提交了新的版本到远程仓库,但是另外的人没有从远程拉取最新的版本,而是在自己之前的版本上,也修改了同样的文件,当这个人提交的远程的时候,就会发生冲突的问题了

我们来模拟一下这个场景:

1、YIFer这个人修改login.html的样式,并提交版本到了远程仓库

<style>
    body{
        background-color: rgb(131,175,155);
    }
</style>

-w648

2、yanhongzhi422也修改了login.html的背景,同时还设置了字体大小

<style>
    body{
        background: rgb(252, 157, 152);
        font-size: 14px;
    }
</style>

注意:现在的问题是,yanhongzhi422没有与远程同步,而是直接修改了与YIFer这个人同样的文件login.html,这样,在yanhongzhi422提交的时候就会出现问题 -w674

3、解决冲突

首先你要清楚,出现冲突的最大原因,是你没有按照项目开发正规的流程去走,所以才带来了这些麻烦,所以,在合作开发的时候就需要注意这些问题

(1)、在开发之前先拉取远程库内容 (2)、注意看注释,项目组人员当修改了大家都会用到的公共文件时,应该注释写清楚

如果已经出现了冲突,要么直接放弃你的内容。如果不是,那么只能手动解决这些冲突,接下来,应该先讨论,比如这里的背景到底是用YIFer提交的绿色,还是使用yanhongzhi422修改的红色。字体需不需要修改,这种有冲突的地方,是需要大家商量,得到一致意见之后再合并修改,最后再提交到远程库,形成新的远程库版本

我们之前使用的命令:

git pull origin master

git pull其实是git fetch与git merge两个命令的合成体,表示从远程拉取并合并,现在我们希望看清楚冲突在哪里,最好可以使用更加清晰的命令

(1)、git fetch:相当于是从远程获取最新版本到本地,不会自动合并。

git fetch origin master

-w496

(2)、通过log日志比较本地master分支与远程master分支的区别

git log master origin/master

-w412

(3)、git merge手动把远程master分支和本地master分支合并

git merge origin/master

执行之后,我们的代码就变成了这样 -w901

在符号
<<<<<<< HEAD

=======
中间的代码,是我们自己本地版本的代码

在符号
=======

>>>>>>> origin/master
中间的代码,是远程仓库拉取下来的代码

这个时候,就只需要我们自己商讨好,然后保留需要的代码,然后重新再提交就可以了

经过讨论,保留了yanhongzhi422的版本,然后我们再重新提交 -w699

到github网站上,可以看到这样的信息 -w957

下面是动画演示执行过程: git_merge

六、开源项目的协作

之前的演示是多人在同一项目中的合作,在github上还支持对于开源项目的修改提交

注意,下面演示的和一般项目开发无关了,这里的操作的意思是:你在github网上看到了很不错的开源项目,你拿下来自己使用起来不错,但是在使用期间发现了问题,并修复了这些问题。然后你把这些问题提交给了原作者,原作者发现你的提交建议之后,接收了你的更改建议

开源项目通常是没有写入的权限的,我们需要换一种协作方式参与到这些开源项目中

为了方便演示,我们又登录了一个新的github账号 yingside,通过项目查找,找到了git-demo1项目

1、查找git-demo1项目

-w1264

2、fork该工程到你自己的github仓库

-w1024 -w1003

3、yingside用户拷贝项目到本地

-w639

4、修改代码,并提交

在login.html页面添加了登录与取消按钮

......
<div>
    <button type="submit">登录</button>
    <button type="button">取消</button>
</div>
......

修改后,提交并推送到远程库: -w579

查看远程库: -w1011

这个时候,你觉得这段修改不错,于是把这次修改推送给了原作者yanhongzhi422

5、提交 pull request

-w1022 -w1012 -w994

6、yanhongzhi422用户登录之后,收到相应的pull request请求

-w1044 -w1013

7、整合代码

-w754 -w759 -w737 -w998

项目中已经应用了yingside用户的提交

8、拉取代码

-w805

下面是动画流程演示:

git_pull_request

本文链接:http://www.yanhongzhi.com/post/git-4.html

-- EOF --

Comments