我正在尝试评估从svn转移到git是否可行。我听说git中的合并比svn中的合并要好得多,但在我的测试中我没有看到它。
这就是我所做的:
创建了一个名为main.c的文件
#include <stdio.h>
function main() {
int myNum = 10;
printf("Hi, my num is %d\n", myNum);
return 0;
}
git init,git add。,git commit -m“Created 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之前添加一个函数,提交并尝试推送它告诉我我的主分支不是最新的,所以我做了一个git pull origin master来使它更新,然后我得到冲突
<<<<<<< HEAD
function main() {
int myNum = 10;
=======
function main()
{
int myNum = 10;
>>>>>>> f0aceffb16f0a24638493367f4be6f2a09e22a82
问题:任何人都可以告诉我,如果我这样做不正确吗?我是否会遗漏某些步骤而导致自己悲伤?也许我真的不明白合并应该比svn更简单?
感谢您抽出时间,
克里斯
答案 0 :(得分:1)
当您对同一行进行两次更改时,Git无法猜出您想要的是什么。没有SCM可以做到这一点。一个人必须告诉它什么版本应该“赢”。
有一些极端情况下git合并比subversion更干净。我没有在他面前,但坦率地说,在现代颠覆中,合并不太可能存在实质性差异。
你决定是否使用git不会归结为某种合并黑魔法。它将归结为git如何作为一个整体运作。
对我而言,git与其他SCM的区别在于它是如何运作的。因为它使用了一个加法模型(新的提交是对图形的补充)并且每次提交都是经过哈希处理的,所以用git丢失任何东西都非常困难。这种复杂的合并变得非常糟糕,导致一个不圣洁的混乱,你不确定你将如何倒带?只需git reset --hard
到合并前的提交。重置你的分支11提交,然后决定它应该是10次提交?没问题,只需将分支移回第10次提交即可。决定你的最新功能分支应该是基于开发而不是高手?只需要几个命令就可以做出改变。
Git的不可变性和内容的哈希给了我一些我从未有过的SVN。置信度。相信如果我搞砸了什么,我可以想办法回到原来的位置。有信心,我可以检查我的变化,并确保他们在与他人分享之前是正确的。我不会感到恐慌“哦不......我只是对每个人做了什么?”
此外,虽然它不是我经常使用的东西,但是能够直接从其他开发者那里获取更改,甚至应用通过电子邮件发送给我的补丁文件的灵活性。
答案 1 :(得分:1)
你们两个都改变了接近的行,而Git在合并这样的近距离区域时是谨慎的。但是,如果在完全不同的区域进行了更改,则合并将完成。
像kdiff3这样的合并工具会自动解决这个合并,大部分时间都是正确的,但我相信Git不希望自动解决有风险的合并。