2012-03-30 142 views
10

我有一个在TFS中启动的项目,然后转移到Git。不幸的是,把它移动到Git的人只是检查了当前文件而不是使用git-tfs。我试图在Git中使用git-tfs从TFS提交的提交之前重新提交他在Git中的新提交。为什么git会显示两个显然相同的添加文件之间的冲突?

要做到这一点,我只是基础重建的混帐TFS提交的顶了他的提交。 (我知道这会搞乱远程的Git分支,但我们是一个小团队,它会好起来的。我也试了樱桃采摘代替,但我打的是同样的问题。)

我的问题m跑成是一组矛盾,看起来是这样的:

<<<<<<< HEAD 
namespace OurNiftyProject 
{ 
    public enum CardType 
    { 
     Visa = 0, 
     MasterCard = 1 
    } 
} 
||||||| merged common ancestors 
======= 
namespace OurNiftyProject 
{ 
    public enum CardType 
    { 
     Visa = 0, 
     MasterCard = 1 
    } 
} 
>>>>>>> Add a bunch of stuff. 

看来,这是间从添加了这些文件的TFS侧的承诺有冲突,并就加入他们的Git侧的承诺(因为Git回购开始空洞)。

顺理成章的事情将跳过此承诺,也许,但也有它的几个文件(比如说十个有几百的)那是新的。当然,这些不会引起冲突。

为什么Git不能自行判断这两个文件是相同的?即使我在重新绑定时使用了--ignore-whitespace,Git仍然会显示几十个像这样的文件,看起来完全相同。我不知道如何解决这个问题。

+0

'差异'也给你一个区别吗? – Reactormonk 2012-03-30 21:52:15

+4

它可能是行结束的差异? – ebneter 2012-03-30 22:01:33

+0

尾随空格或许 – 2012-03-30 22:29:07

回答

9

应该差不多行结束差异,ebneter评论。
我已经详细的很久以前的git合并如何不擅长忽视这些差异(而不是空格差异):
Is it possible for git-merge to ignore line-ending differences?

这就是为什么一致 EOL转换政策是必要的针对异构环境中的这些存储库。
请参阅“Distributing git configuration with the code”。

+0

Git是否真的考虑与空白区别不同的行结束区别!?我认为行结尾*是*空格! – 2012-03-31 00:49:12

+0

@Kyralessa:不完全。 http://gitster.livejournal.com/28862。html提到'cr-at-eol':带有'trailing-space',如果在这样的回车符之前的字符不是空格,而是默认不* *,则不触发。 – VonC 2012-03-31 09:22:12

5

我在做类似的事情,只是发现了“-X忽略空间-AT-EOL”。它可用于合并和rebase。似乎是做正确的事情,但使我的死亡缓慢。

+1

也许他们发现了一个加速,因为我加入国旗不会减慢我的速度。 git版本1.9.5.msysgit.0 – AnneTheAgile 2015-04-16 23:44:39

1

我只是碰到了这个问题,其次是这个职位只是意识到这是我的一个行结束的情况也是如此。因为我曾经有过“使用Windows样式行结束符”,但是在某个时候,对于不同的项目,我将其重新配置为“使用Unix样式行结束符”(这些配置是可从Git安装程序获得)。

返回到“使用Windows风格的行尾”解决了这个问题,而不使用“ - 忽略空格”

1

如果可以排除由于不同的行尾无形的变化,你可能要检查的文件有不同的模式(例如,如果可执行位被设置)。当文件模式改变时,Git在diff中显示完整文件。

相关问题