C#学习教程:VS2013C#和Git:拉Express(而不是VSGit插件)编写用C#编写的项目时,.csproj文件未合并,请注意我们遇到了问题。我们的工作流程设置如下:我们有一个中央存储库,我们每个人都有自己的存储库分支,我们可以单独使用。当我们的个人工作完成后,我们将推送到中央存储库。当我们想要与中央存储库同步时,我们拉取。问题是当我们拉取时,csproj文件是随机更新的。有时它们会正确更新并且自上次拉取后添加的文件在VS中正确显示,有时csproj文件根本不受影响。这很奇怪,因为csproj在其他任何地方都能正确更新,包括中央存储库,有时在我们拉取它时不能正确更新。在我们的.gitattributes文件中,我们将.csproj设置为merge=union。我们在拉取时执行的命令是gitpullupstream,其中upstream只是一个指向我们中央仓库的远程。有任何想法吗?我根据EdwardThomson的评论将此作为一个答案,此链接用于合并csproj文件中的冲突(haacked.com/archive/2014/04/16/csproj-merge-conflicts)。请注意,我对VisualStudios、C#或Windows一无所知,但我知道git。?问题是当我们拉取时,csproj文件会随机更新。有时它们会正确更新并且自上次拉取后添加的文件在VS中正确显示,有时csproj文件根本不受影响。首先,让我们做一些快速的注释:gitpull只是gitfetch,然后是gitmerge。你可以告诉Git做一个rebase。根据你的开发过程,这可能是个好主意,但不会改变这个特定的问题,因为......Git中没有其他东西会合并提交,但是......其他几个命令,包括gitrebase,使用合并机制.推送(gitpush)永远不会进行任何合并,所以你只会在“我和别人做了一些事情后我得到了一些新东西”的情况下看到问题。即便如此,您是否发现问题在很大程度上取决于您和其他人所做的事情。这是因为gitmerge和gitrebase使用的合并机制不是那么智能。现在让我们看看潜在的问题,它(基于链接)是这些*.csproj文件包含XML:structured数据,git内置的面向文本的合并操作不能正确合并。Changesconflict当在gitdiff输出中,两条不同的开发线(合并分支或提交)对单个文件的同一区域进行不同的更改。一个典型的例子发生在一个文档中,当两个编辑不能就拼写达成一致时。例如,我之前做了这个改变:diff--gita/plates.texb/plates.texindex09939ca..3dfc610100644---a/plates.tex+++b/plates.tex@@-15,7+15,7@@2010年2月我去澳大利亚部分地区旅行end{plate*}袋鼠可能是最广为人知的有袋动物。实际上有四种大袋鼠:-红袋鼠、东西灰袋鼠和袋鼠袋鼠。+红色,东部和西部的灰色,以及反洛平。还有较小的树袋鼠和鼠袋鼠。begin{plate*}[h]如果我将它与其他任何人在diff合并中显示的任何行上进行不同更改,但留下字母a拼写的“灰色”,我就会发生冲突。例如,如果我的编辑坚持拼写“kangaru”这个词,那么更改就会发生冲突:Auto-mergingplates.texCONFLICT(content):Mergeconflictinplates.tex自动合并失败;修复冲突然后提交结果。当git遇到冲突更改时,通常的反应是简单地声明有冲突并停止。它将为您留下文件的工作树版本,冲突标记=======>>>>>>>围绕冲突的双方(和|当且仅当您将merge.conflictstyle设置为diff3|高于基础版:end{plate*}|mergedcommonancestors袋鼠可能是最广为人知的有袋类动物。大袋鼠实际上有四种:红袋鼠、东西灰袋鼠和袋鼠袋鼠。还有较小的树袋鼠和鼠袋鼠。=======袋鼠可能是最广为人知的有袋动物。实际上有四种大袋鼠:红袋鼠、东西灰袋鼠和袋鼠袋鼠。有还有更小的树袋鼠和老鼠袋鼠。>>>>>>>masterbegin{plate*}[h]但是,这是默认行为。您可以通过命令行开关或.gitattributes文件更改默认值。您选择了unionmerge,git文档有所改进:union在文本文件上运行3向文件级合并,但从两个版本中获取行而不是留下冲突标记。这往往会以随机顺序在结果文件中添加行,用户应该验证结果。如果您不明白它的含义,请不要使用此功能。(我的大胆)。不过,这里的简短版本是git会认为合并成功(好吧,它确实成功了),但会通过生成无效的XML文件来实现。在链接的haacked.com页面上,有一些示例说明了*.csproj文件究竟是如何出错的,但这通常适用于任何联合合并:它不够智能,无法获得正确的结果,而且只有很少的驱动程序位置合理。在某些情况下,手动调用它是有意义的,然后查看文件并手动进行任何更正,但由于它只是成功并让合并继续进行,所以你必须非常小心地将它放在.gitattributes中。理想情况下,我们希望有一个理解XML格式和.csproj文件意图的合并驱动程序(仅XML格式是不够的,因为标记的语义独立于语法)。由于我不在Windows上使用VS,我只能再次引用haacked.com的文章:另一种方法是为Git编写一个合适的XML合并驱动程序,但这是一个相当大的挑战,因为我的同事MarkusOlsson可以证明这一点。如果它很容易,甚至是中等难度,那就完成了。虽然我想知道我们是否将其限制为常见的.csproj问题,但我们能否编写一个不完美但足以处理常见合并冲突的问题?或许。如果内容像示例XML一样简单,我认为这样的驱动程序不会太难,所以我怀疑它们会变得更复杂。以上是C#学习教程:VS2013C#和Git:拉取时.csproj文件不合并共享。如果对大家有用,需要进一步了解C#学习教程,希望大家多加关注---本文整理自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
