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是图形化界面,所以放在这里易于理解。

1、第一步:拥有个人的Github账号,并创建一个仓库

1.1 在注册成功个人的Github账号以后,可以看到如下界面,点击"New"即创建新仓库,进入下一界面

Visual Studio C# 利用git和github协同开发时产生冲突的解决办_第1张图片

 

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

Visual Studio C# 利用git和github协同开发时产生冲突的解决办_第2张图片

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

Visual Studio C# 利用git和github协同开发时产生冲突的解决办_第3张图片

2、第二步:协同开发

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

Visual Studio C# 利用git和github协同开发时产生冲突的解决办_第4张图片

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

2.2.1 先复制仓库地址

Visual Studio C# 利用git和github协同开发时产生冲突的解决办_第5张图片

 

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

Visual Studio C# 利用git和github协同开发时产生冲突的解决办_第6张图片

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

Visual Studio C# 利用git和github协同开发时产生冲突的解决办_第7张图片

文件test2也做相同的操作

这样

Visual Studio C# 利用git和github协同开发时产生冲突的解决办_第8张图片

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

2.3.1 首先我们先创建一个dev分支,并同步到远程,这个分支是两个人的共同的主开发分支

Visual Studio C# 利用git和github协同开发时产生冲突的解决办_第9张图片

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

 Visual Studio C# 利用git和github协同开发时产生冲突的解决办_第10张图片         Visual Studio C# 利用git和github协同开发时产生冲突的解决办_第11张图片

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

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

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

Visual Studio C# 利用git和github协同开发时产生冲突的解决办_第12张图片         Visual Studio C# 利用git和github协同开发时产生冲突的解决办_第13张图片

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

 先是添加。

Visual Studio C# 利用git和github协同开发时产生冲突的解决办_第14张图片

然后会出现一个文件的列表,直接点确定就可以了。然后会出现如下界面

Visual Studio C# 利用git和github协同开发时产生冲突的解决办_第15张图片

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

Visual Studio C# 利用git和github协同开发时产生冲突的解决办_第16张图片

Visual Studio C# 利用git和github协同开发时产生冲突的解决办_第17张图片

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

Visual Studio C# 利用git和github协同开发时产生冲突的解决办_第18张图片

接下来,因为我们远端还有一个github替我们管理着仓库,所以我们还要同步到远端的个人分支上

右键菜单中选择“同步”

Visual Studio C# 利用git和github协同开发时产生冲突的解决办_第19张图片

接下来点击推送即可,这里要注意远端分支是否为个人的开发分支,然后origin的值是否是远端的仓库地址,一般按照前面的操作来,这里的数据就是正确的,如果有错误,可以检查一下这两个值

Visual Studio C# 利用git和github协同开发时产生冲突的解决办_第20张图片

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

Visual Studio C# 利用git和github协同开发时产生冲突的解决办_第21张图片

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

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

Visual Studio C# 利用git和github协同开发时产生冲突的解决办_第22张图片

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

Visual Studio C# 利用git和github协同开发时产生冲突的解决办_第23张图片

 

 

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

Visual Studio C# 利用git和github协同开发时产生冲突的解决办_第24张图片Visual Studio C# 利用git和github协同开发时产生冲突的解决办_第25张图片

 

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

Visual Studio C# 利用git和github协同开发时产生冲突的解决办_第26张图片

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

2.6.1 因为test2的仓库内还没有任何文件,所以先将远程中dev分支内的最新内容拉取下来

Visual Studio C# 利用git和github协同开发时产生冲突的解决办_第27张图片

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

Visual Studio C# 利用git和github协同开发时产生冲突的解决办_第28张图片

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

 Visual Studio C# 利用git和github协同开发时产生冲突的解决办_第29张图片

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

Visual Studio C# 利用git和github协同开发时产生冲突的解决办_第30张图片

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还想要合并的话,在没有冲突的情况下还是可以合并的,但是因为存在了冲突,所以我们接下来进入重头戏,也就是解决冲突。

Visual Studio C# 利用git和github协同开发时产生冲突的解决办_第31张图片

 

 2.7 解决冲突

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

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

这里直接点击确定就可以啦!

Visual Studio C# 利用git和github协同开发时产生冲突的解决办_第32张图片

2.7.2 点击确定以后,会继续弹出一个框,点击是可以查看一下变更情况,这里我们点击“是”来展示一下

Visual Studio C# 利用git和github协同开发时产生冲突的解决办_第33张图片

2.7.3 点击以后出现如下界面,我们可以看到存在一个冲突,这就是我们需要解决的。

Visual Studio C# 利用git和github协同开发时产生冲突的解决办_第34张图片

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

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

Visual Studio C# 利用git和github协同开发时产生冲突的解决办_第35张图片

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

Visual Studio C# 利用git和github协同开发时产生冲突的解决办_第36张图片

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

第一种:

第一步:直接删除掉红框内这部分看起来奇奇怪怪的东西,这样删除以后,可以保证项目可以打开,但是聪明的大家肯定会发现,删除掉的是form2的一些内容,所以对form2肯定会产生影响

Visual Studio C# 利用git和github协同开发时产生冲突的解决办_第37张图片Visual Studio C# 利用git和github协同开发时产生冲突的解决办_第38张图片

 

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

Visual Studio C# 利用git和github协同开发时产生冲突的解决办_第39张图片             Visual Studio C# 利用git和github协同开发时产生冲突的解决办_第40张图片

第二种:

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

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

 Visual Studio C# 利用git和github协同开发时产生冲突的解决办_第41张图片Visual Studio C# 利用git和github协同开发时产生冲突的解决办_第42张图片

2.7.7 至此我们就解决了该次冲突,因为本次只是演示,冲突文件只有这一个,其他的冲突大致上解决方法都差不多,代码文件基本上都是可以用记事本打开的,或者有其他的打开软件也可以,如果冲突文件打开以后是乱码,那很有可能这个文件是不应该出现在仓库里的,因为仓库更多地是用来管理代码和一些必要的启动的文件,如果是本地开发工具的自动生成文件,是要忽略掉的,不然非常容易产生解决不了的冲突,这也就是我们为什么在github上创建仓库的时候添加了对应的忽略文件,其他开发过程大多也可以找到相应的忽略文件。

2.7.8 然后我们就继续2.4.2的步骤,依旧是跳过,当然在过程中可能会出现与2.4.2 中不完全一样的内容,随机应变即可,基本上闭着眼睛继续下一步操作就可以了,不需要修改太多的内容,然后一般就可以成功合并了,代码中如果出现这样的情况也一样操作就可以了。

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

Visual Studio C# 利用git和github协同开发时产生冲突的解决办_第43张图片

Visual Studio C# 利用git和github协同开发时产生冲突的解决办_第44张图片

Visual Studio C# 利用git和github协同开发时产生冲突的解决办_第45张图片

然后再推送到远端即可。

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

然后就会进入冲突文件的界面,一样进行手动修改就可以了,最后再点击merge,confirm merge即可进行合并操作了。

Visual Studio C# 利用git和github协同开发时产生冲突的解决办_第46张图片Visual Studio C# 利用git和github协同开发时产生冲突的解决办_第47张图片

 

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

你可能感兴趣的:(Visual Studio C# 利用git和github协同开发时产生冲突的解决办)