Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/svn/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
评估git和merge不';I don’我好像没有按我想象的那样工作_Git_Svn_Git Merge - Fatal编程技术网

评估git和merge不';I don’我好像没有按我想象的那样工作

评估git和merge不';I don’我好像没有按我想象的那样工作,git,svn,git-merge,Git,Svn,Git Merge,我试图评估从svn迁移到git是否是一个可行的选择。我听说git中的合并比svn中的合并效果好得多,但在我的测试中,我没有看到这一点 以下是我所做的: 创建了一个名为main.c的文件 #include <stdio.h> function main() { int myNum = 10; printf("Hi, my num is %d\n", myNum); return 0; } #包括 函数main(){ int myNum=10; printf

我试图评估从svn迁移到git是否是一个可行的选择。我听说git中的合并比svn中的合并效果好得多,但在我的测试中,我没有看到这一点

以下是我所做的:

  • 创建了一个名为main.c的文件

    #include <stdio.h>    
    
    function main() {
      int myNum = 10;
    
      printf("Hi, my num is %d\n", myNum);
    
      return 0;
    }
    
    #包括
    函数main(){
    int myNum=10;
    printf(“嗨,我的数值是%d\n”,myNum);
    返回0;
    }
    
  • git init、git add、git commit-m“创建main.c”,并推送到源主机

  • 在main.c文件中,我故意不遵守编码标准,并且错误地命名了函数
  • 另一个用户出现并更改代码以遵守编码标准(大括号移到下一行),提交和推送

    #include <stdio.h>    
    
    function main()
    { //This was changed to a specific coding standard
      int myNum = 10;
    
      printf("Hi, my num is %d\n", myNum);
    
      return 0;
    }
    
    #包括
    函数main()
    {//这已更改为特定的编码标准
    int myNum=10;
    printf(“嗨,我的数值是%d\n”,myNum);
    返回0;
    }
    
  • 我在main、commit和push之前添加了一个函数,它告诉我我的主分支不是最新的,所以我使用git-pull-origin-master来更新它,然后我得到了冲突

    <<<<<<< HEAD
    function main() {
      int myNum = 10;
    =======
    function main()
    {
      int myNum = 10;
    >>>>>>> f0aceffb16f0a24638493367f4be6f2a09e22a82
    
    >F0ACEFB16F0A24638493367F4BE6F2A09E22A82
    
问题:有人能告诉我我是否做得不对吗?我是否遗漏了某些步骤,从而导致自己悲伤?也许我真的不明白合并如何比svn更简单

感谢您抽出时间,

Chris

当您对同一行进行了两次更改时,Git猜不出您想要什么。没有SCM可以做到这一点。人类必须告诉它什么版本应该“赢”

在一些极端情况下,git的合并比subversion更干净。我面前没有它们,但坦率地说,对于现代颠覆,合并不太可能有实质性的区别

您是否使用git的决定不会归结为某种合并黑魔法。这将取决于git作为一个整体的运作方式

对我来说,git与其他SCM的区别在于它的工作方式。因为它使用一个加法模型(新的提交是对图形的添加),并且每个提交都是散列的,所以使用git很难丢失任何内容。那个复杂的合并失败了,导致了一个邪恶的混乱,你不知道你会如何倒带?只需
git reset——在合并之前硬地提交。将分支重置回11次提交,然后决定应该是10次提交?没问题,只需将分支移回第10个提交。决定你的最新功能分支应该基于开发而不是主功能?只需几个命令就可以进行更改

Git的不变特性和内容的散列给了我SVN从未有过的东西。自信。相信如果我把事情搞砸了,我能找到一个方法回到我曾经的地方。我有信心在与他人分享之前检查我的更改并确保它们是正确的。我没有那种“哦,不……我刚才对每个人都做了什么?”的恐慌


此外,虽然我不经常使用它,但直接从另一个开发人员那里获取更改,甚至应用通过电子邮件发送给我的修补程序文件的能力是非常灵活的。

你们都更改了相近的行,Git在合并类似这样的相近区域时是谨慎的。但是,如果在完全不同的区域进行了更改,则合并将正常进行


一些合并工具,比如kdiff3,会自动解决这个合并问题,而且在大多数情况下都是正确的,但我相信Git不希望自动解决有风险的合并问题。

仅仅因为合并更简单,并不意味着永远不会有冲突。冲突不可避免。您是否更改了行
函数main(){
推后?@jbnize不太正确。我预计会有冲突,但这似乎太容易了,不只是自动合并?@CharlesB我唯一更改的是从同一行到下一行的大括号。谢谢你提供的信息。合并不会是最终结果。一切都由决定;只是我很好奇当我在做一些关于为什么选择git而不是svn的研究时,我很感激诚实地告诉我,合并不一定会有任何实质性的区别。