文章目录
- 完成准备工作
- 多人协作
- 场景一
- 场景二
- 远程分支删除后,本地 git branch -a 依然能看到的解决办法
完成准备工作
在之前,我们所完成的工作如下:
- 基本完成 Git 的所有本地库的相关操作,git基本操作,分支理解,版本回退,冲突解决等等
- 申请码云账号,将远端信息clone到本地,以及推送和拉取。
是时候干最重要的一件事情了,实现多人协作开发!
为了做这件事情,我们需要先做一些准备工作。我们之前已经将项目 clone 到了指定目录,如:
我们在 windows 环境下,再 clone 同一个项目仓库,来模拟和别人一起协作开发:
为了方便,我在这里就使用https的方式 clone 了,首先在Windows下创建一个空目录,点击右键在终端打开
需要注意的是,这里 clone 时,要先将你所对应的仓库的开源。
我们这里是模拟了两个用户,实际开发中,每个用户都有自己的 gitee/github 账号,如果要多人进行协同开发,必须要将用户添加进开发者,用户才有权限进行代码提交:
不同的成员都有不同的权限:
到此,相当于有了两个用户,分别在linux和windows上针对于同项目进行协作开发,我们的准备工作到此结束。
目前,我们的仓库中只有一个master主分支,但在实际的项目开发中,在任何情况下其实都是不允许直接在master分支上修改代码的,这是为了保证主分支的稳定。所以在开发新功能时,常常会新建其他分支,供开发时进行迭代使用。
那么接下来,就让我们在gitee上新建dev远程分支供我们使用:
创建成功的远程分支是可以通过 Git 拉取到本地来,以实现完成本地开发工作。
之前讲的 git branch
其实只能查看本地分支,要查看远程分支需要加上 -r
选项。
但前提是要 pull 一下拉取最新的远端仓库,才能看到最新的内容。
拉取后便可以看到远程的 dev 分支,接着切换到 dev 分支供我们进行本地开发。要说明的是,我们切换到的是本地的 dev 分支,根据示例中的操作,会将本地分支和远程分支的进行关系链接 git checkout -b [本地分支名] [origin/远端分支名]
。
这里如果创建了分支,但没有与远端的分支相关联,可以使用如下命令进行关联:
git branch --set-upstream-to=origin/[远端分支名] [本地分支名]
这步操作是在本地创建了一个 dev 分支,并且该分支与远端的 origin/dev
相关联,我们也可以使用命令 git branch -vv
来查看本地与远程分支的相关联信息:
对于Windows用户来说,操作与上面也是一样的
现在,我们模拟的两个用户就可以在 dev 上完成开发。
多人协作
场景一
首先,我先在Linux上的 dev 分支上进行一次开发,并 push 到远程。例如:
让我们来看看码云上目前仓库的状态:
至此,我们已经将代码成功推送至码云,接下来假如Windows用户要和Linux用户协同开发,碰巧也要对 file.txt 文件作修改,并试图推送,例如:
这时推送失败,因为 Windows 用户的最新提交和 Linux 用户推送的提交有冲突,解决办法也很简单,Git已经提示我们,先用 git pull
把最新的提交从 origin/dev
抓取下来,然后,在本地进行合并,并解决冲突,再推送。操作如下:
解决冲突,重新推送:
此时,我们看到远端的码云已经能看到我们的新提交了!
由此,两名开发者已经开始可以进行协同开发了,不断的 git pull/add/commit/push
,遇到了冲突,就使用我们之前讲的冲突处理解决掉冲突。 对于你来说,要想看到别人的代码,只需要 pull 一下即可,例如:
最后不要忘记,虽然我们是在分支上进行多人协作开发,但最终的目的是要将开发后的代码合并到 master上去,让我们的项目运行最新的代码。接下来我们就需要做这件事情了:
- 第一步
切换至 master 分支, 先git pull
一下,保证本地的 master 是最新内容。合并前这么做是一个好习惯,因为这是多人协作,防止别人先上传了,我们的 master 分支不是最新版的。
- 第二步
切换至 dev 分支, 合并 master 分至,这么做是因为如果有冲突,可以在dev分支上进行处理,而不是在在 master 上解决冲突。这么做是一个好习惯,千万不要觉得冗余。
- 第三步
切换至 master 分支,合并 dev 分支
- 第四步
将 master 分支推送至远端
此时,查看远端仓库,master 已经是最新代码了:
此时,dev 分支对于我们来说就没用了, 那么 dev 分支就可以被删除掉。我们可以直接在远程仓库中 将dev分支删除掉:
总结一下,在同一分支下进行多人协作的工作模式通常是这样:
- 首先,可以试图用
git push origin branch - name
推送自己的修改; - 如果推送失败,则因为远程分支比你的本地更新,需要先用
git pull
试图合并; - 如果合并有冲突,则解决冲突,并在本地提交;
- 没有冲突或者解决掉冲突后,再用
git push origin branch - name
推送就能成功! - 功能开发完毕,将分支
merge
进master
,最后删除分支。
场景二
一般情况下,如果有多需求需要多人同时进行开发,是不会在一个分支上进行多人开发,而是一个需求或一个功能点就要创建一个 feature
分支。
现在同时有两个需求需要Linux用户和Windows用户进行开发,那么这两个用户便可以各自创建一个分支来完成自己的工作。在上面我们已经了解了可以从码云上直接创建远程分支,其实在本地创建的分支也可以通过推送的方式发送到远端。在这里我们就来用一下这种方式。
Linux用户:
- 创建本地分支并切换
- 新增需求内容:创建function1文件,将 feature-1 分支推送到远端
Windows用户:
此时,在本地,两个用户看不到对方新建的文档。并且推送各自的分支时,并没有任何冲突,两个用户互不影响,用起来很舒服!
再来看下远端码云上此时的状态:
对于Linux用户的分支:
对于 Windows 用户的分支:
正常情况下,两个用户就可以在自己的分支上进行专业的开发了!
但天有不测风云,Windows用户突然生病了,但需求还没开发完,需要Linux用户帮他继续开发,于是他便把feature-2分支名告诉你了。这时你就需要在自己的机器上切换到feature-2分支帮忙继续开发,要做的操作如下:
- 第一步
必须先拉取远端仓库内容
- 第二步
切换到 feature-2 分支上,可以和远程的feature-2分支关联起来,否则将来只使用 git push 推送内容会失败
切换成功后,便可以看见 feature-2 分支中的 function2 文件了,接着就可以帮Windows用户进行开发,并推送内容:
查看远程状态,推送成功了:
这时,Windows用户已经修养得差不多,可以继续进行自己的开发工作,那么他首先要获取到你帮他开发的内容,然后接着你的代码继续开发。或者你已经帮他开发完了,那他也需要在自己的电脑上看看你帮他写的代码:
Pull 无效的原因是Windows用户没有指定本地 feature-2 分支与远程 origin/feature-2 分支的链接,根据提示,设置feature-2和origin/feature-2的链接即可:
目前,Windows用户的本地代码和远端保持严格一致。Linux用户和Windows用户可以继续在不同的分支下进行协同开发了…
各自功能开发完毕后,不要忘记我们需要将代码合并到 master 中才算真正意义上的开发完毕。
由于Linux用户和Windows用户率先开发完毕,于是开始merge,这里介绍另外一种方式:
此时这里就变成了1:
随后我们点进去:
到这里就不是开发人员所管理的了,接下来会有专门的人来对你的代码进行查阅与评估:
当相关的人员做完以上流程我们的分支就合并到了master分支上了
我们去看看主分支上的文件:
这个过程是这样的:
远程分支删除后,本地 git branch -a 依然能看到的解决办法
当前我们已经删除了远程的几个分支,使用git branch -a命令可以查看所有本地分支和远程分支,但发现很多在远程仓库已经删除的分支在本地依然可以看到。例如:
使用命令 git remote show origin
,可以查看 remote 地址,远程分支,还有本地分支与之相 对应关系等信息。
此时我们可以看到那些远程仓库已经不存在的分支,根据提示,使用 git remote prune origin
命令:
这样就能成功解决了。