Visual Studio C# 利用git和github协同开发时产生冲突的解决办

Visual Studio C# 利用git和Github协同开发时产生冲突的解决办法

  1.   前言:在前两天的助教做业中,发现了本身没有办法解决在用vs开发C#的窗体项目的过程当中产生的冲突问题,在查阅了资料,询问了一些人之后,总结一下,不知道是否彻底正确,但基本上能够解决大部分冲突。
  2.        过程使用工具列表:
      • git
      • github
      • Visual Studio
      • TortoiseGit

       3.   其中TortoiseGit只是辅助工具,在本次博客中描述的全部利用TortoiseGit进行的操做均可以使用git进行相应的操做,其中的对应关系,在熟练掌握git命令行之后就会明白,这里就不一一介绍了,由于TortoiseGit是图形化界面,因此放在这里易于理解。git

一、第一步:拥有我的的Github帐号,并建立一个仓库

1.1 在注册成功我的的Github帐号之后,能够看到以下界面,点击"New"即建立新仓库,进入下一界面

 

 1.2 进入建立新仓库的界面,接下来就是按照图中的描述,将各信息填完,未说明的部分默认就能够。填完信息之后点击“Create repository”便可。

1.3 接下来会自动进入仓库界面,在这个界面能够对仓库进行一些简单的管理, 此次不介绍其余功能,单纯介绍如何解决协同开发过程当中产生的冲突。

二、第二步:协同开发

2.1  这里为了模拟协同开发,我在本地从新建立了两个文件夹,用来模拟两个程序员在合做开发本次项目。

2.2 接下来就是从Github上将仓库克隆到本地的这两个文件夹内。

2.2.1 先复制仓库地址程序员

 

 2.2.2 在test1文件内右击空白处,能够看到“Git Bash here”,点击之后进入git的命令行界面。github

 2.2.3 接下来按照图片中的介绍克隆远程仓库到本地工具

文件test2也作相同的操做开发工具

这样字体

 2.3  这样两个文件夹内都是最新的仓库的版本。接下来咱们建立一下分支。

2.3.1 首先咱们先建立一个dev分支,并同步到远程,这个分支是两我的的共同的主开发分支命令行

2.3.2 接下来在两个仓库内为每一个仓库都建立一个我的的开发分支,并同步到远程,这里我为test1文件夹里的仓库建立了分支dev-01,为test2文件夹里的仓库建立了分支dev-02,具体操做跟上面建立主开发分支同样3d

         

2.3.3 接下来在每一个文件夹内都切换至对应的我的分支,在我的分支里进行开发,随后的推送也应该推送到我的的分支,也就是dev-01和dev-02,而不要直接推送至dev分支。orm

2.4 接下来就是具体的开发过程

2.4.1 先 test1 内添加一个新项目。项目的初始结构如图所示。xml

       

 2.4.2 接下来就是用git的一系列操做,add-> commit-> push ,这里我用TortoiseGit,

 先是添加。

而后会出现一个文件的列表,直接点肯定就能够了。而后会出现以下界面

能够直接点肯定旁边的提交,也能够点击肯定退出这个界面,从右键的菜单中进入提交界面

出现下面的界面,即表示提交成功

接下来,由于咱们远端还有一个github替咱们管理着仓库,因此咱们还要同步到远端的我的分支上

右键菜单中选择“同步”

接下来点击推送便可,这里要注意远端分支是否为我的的开发分支,而后origin的值是不是远端的仓库地址,通常按照前面的操做来,这里的数据就是正确的,若是有错误,能够检查一下这两个值

推送成功后,就会出现以下画面

2.5 接下来是展现一下如何在远端的Github上进行merge的操做。

2.5.1 如图所示,点击 “New pull request”

2.5.2 即便前面没有切换到我的的开发分支,也能够在任意一个分支内点击“New pull request”,按照图片所示,仍是能够在下图的界面中切换分支的。点击“create pull request”

 

 

 2.5.3 接下来点击“Merge pull request”,而后会让你确认一下,继续点击“confirm merge”就能够了

 

2.5.4 出现以下界面即表示merge成功了

2.6 接下来就是用test2文件夹来模拟另外一我的的开发

2.6.1 由于test2的仓库内尚未任何文件,因此先将远程中dev分支内的最新内容拉取下来

2.6.2 以下图所示,选择正确的远端分支,并勾选上“合并”选项,点击肯定后,便可进行拉取操做

2.6.3 原本test2 的仓库内是没有任何内容的,成功进行拉取后就会出现相应的文件

 

2.6.4 打开项目后,并添加一个新的窗体form2

2.6.5 接下来就按照 2.4.2 的步骤操做便可,这里就直接跳到以下图所示的界面,这里咱们能够很清楚的看到几个红字,也就是github不能自动合并了,这是为何了呢?这里咱们先来回顾一下咱们以前作了什么

首先,咱们让test1和test2都处于仓库的最新版本,也就是啥也没有

而后咱们在test1和test2的开发过程当中切换至各自的开发分支,同步到远端仓库(github)时也是推送到各自的我的分支

而后咱们将dev-01的内容成功merge到了dev中,这样应该发现问题所在了把,也就是,test2开发的时候基于的远程仓库版本是什么都没有的,跟test1是同样的,可是test1先于test2 merge到了dev分支中,因此如今的dev已经不是当初的dev了,这个时候若是test2还想要合并的话,在没有冲突的状况下仍是能够合并的,可是由于存在了冲突,因此咱们接下来进入重头戏,也就是解决冲突。

 

 2.7 解决冲突

2.7.1 首先仍是先拉取最新的dev分支的内容到本地test2文件内的dev-02分支上。

按照前面讲述的操做后,会发现出现了以下的界面,提示git 未能顺利结束,并弹出一个提示框,这个的出现很正常,由于你在远端想要合并的时候就已经知道有冲突了,因此在这里天然是不能正常合并成功了。咱们须要解决掉冲突文件。这里题外话一句,咱们如今拉取的是最新的dev,因此解决了冲突之后,通常来讲是能够成功在远端进行merge操做的,至于不通常的状况,暂时本人还没遇到,之后若是有遇到的话再继续补充。

这里直接点击肯定就能够啦!

2.7.2 点击肯定之后,会继续弹出一个框,点击是能够查看一下变动状况,这里咱们点击“是”来展现一下

2.7.3 点击之后出现以下界面,咱们能够看到存在一个冲突,这就是咱们须要解决的。

2.7.4 首先咱们用记事本打开一下这个文件,咱们会发现一个神奇的东西,首先要说明一下,这个冲突文件内的格式是xml格式。针对vs 的C#窗体项目来讲,这个文件内容出错,是没法正确打开项目的。

红色圈起来的部分就是冲突的部分,

2.7.5 咱们在未修改任何东西的状况下尝试打开该项目,会出现这个报错的状况,在个人尝试下,这个的报错,就是上面那个文件内容出错了。

2.7.6 接下来为你们介绍两种解决该冲突的办法

第一种:

第一步:直接删除掉红框内这部分看起来奇奇怪怪的东西,这样删除之后,能够保证项目能够打开,可是聪明的你们确定会发现,删除掉的是form2的一些内容,因此对form2确定会产生影响

 

第二步:咱们打开项目发现的确没有看到form2在项目资源里,解决办法很简单,再把form2手动添加一下就能够啦,由于form2的文件是存在的,只是未加载到项目中

           

第二种:

这一种方法很简单,只有一步,删除掉红线划掉的三行内容便可,这三行是git在合并时自动加上的,用来标注改动的内容,咱们须要手动解决这个冲突的缘由就在于这,由于自动加了一些内容,因此删除就行了,至于这三行标注中间的内容,就是咱们和最新版本不同的地方,咱们须要人为决定是否保留。

删掉三行内容后,项目就能够正常打开了,还能够看见form1和form2。

 

2.7.7 至此咱们就解决了该次冲突,由于本次只是演示,冲突文件只有这一个,其余的冲突大体上解决方法都差很少,代码文件基本上都是能够用记事本打开的,或者有其余的打开软件也能够,若是冲突文件打开之后是乱码,那颇有可能这个文件是不该该出如今仓库里的,由于仓库更多地是用来管理代码和一些必要的启动的文件,若是是本地开发工具的自动生成文件,是要忽略掉的,否则很是容易产生解决不了的冲突,这也就是咱们为何在github上建立仓库的时候添加了对应的忽略文件,其余开发过程大多也能够找到相应的忽略文件。

2.7.8 而后咱们就继续2.4.2的步骤,依旧是跳过,固然在过程当中可能会出现与2.4.2 中不彻底同样的内容,随机应变便可,基本上闭着眼睛继续下一步操做就能够了,不须要修改太多的内容,而后通常就能够成功合并了,代码中若是出现这样的状况也同样操做就能够了。

下面展现会出现的一些新界面

而后再推送到远端便可。

2.7.9 接下来就要说一下另外一个问题,虽然本地的冲突解决了,可是远程一样也须要推送最新的内容上去,这里可能会出现一个问题就是明明将最新的版本同步到github了,可是实际上github上并无显示最新的提交,至于为何会这样,我也不知道了。因此这里再补充一个解决merge冲突的办法;在gituhub端修改冲突文件。具体操做步骤为虽然产生冲突但依旧create pull request -> resolve conflict (这是一行小灰色字体,在以前confirm merge 的那个地方能够找到)

而后就会进入冲突文件的界面,同样进行手动修改就能够了,最后再点击merge,confirm merge便可进行合并操做了。

 

至此基本上就能解决冲突而且成功合并了。

相关文章
相关标签/搜索