2012-10-25 123 views
2

我试图把Linux机器上的一个提交拉到Windows机器上。我收到此错误信息:git pull errors

error: git checkout-index: unable to create file my/folder/name/: (Invalid argument) 

的Linux机的出现似乎是这样的2 “姓名”文件夹名为:'name''Name'。即使将它们联合在'name'之后并重新提交,我仍然收到相同的错误消息。

在Windows上我有git版本1.7.3.1.msysgit.0,在Linux上我有git 1.7.5.4版本。

我确实发现了一个bunchofseeminglyrelated SO这样的问题,但没有一个有明确或相关的解决方案。

更新:这些文件托管在远程托管服务上,以便Windows和Linux计算机都可以从远程回购站获取。

+0

而这可能无法与http://stackoverflow.com/questions/1209902/git-checkout-and-reset-on-windows-occasionally-shows-random-files-have-changed?路径或文件名中是否有特殊字符? (如https://github.com/thoughtbot/paperclip/pull/621或http://code.google.com/p/msysgit/issues/detail?id=80所示) – VonC

+0

不是我能看到的。有问题的名字只是'测试'。 –

+0

当你说“*将它们统一在'name' *下”时,你是否添加了一个修复问题的新提交,或者是否重写了历史记录,以使两个单独版本的'name'永远不存在? – nickgrim

回答

2

回答我自己的问题,由于解决方案的怪异。

第一步是@Don Branson,@VonC和@robinst建议。我在Windows机器上的一个新文件夹中做了一个干净的clone
这似乎没有工作,和git返回完全相同的错误。

但是git status将违规文件夹显示为“已删除”,即使名称相同的文件夹确实存在并且包含正确的文件。
然后我上演并提交了“已删除”文件夹,推送到远程回购。并从我原来的回购协议中提交。 瞧瞧该分支已正确更新。

+0

优秀!良好的解决方法。 +1 – VonC

+1

优秀。我只是尝试在本地进行复制,并且无法重复结果。 git 1.7.1在Linux主目录上,git 1.7.5.1在Windows目标上,''git clone''只需将我的目录''m''和''M''放入一个名为''M'的目录中'。有趣。 –

+0

@唐布兰森,试验的赞美。在统一它们之前,尝试提交'm'和'M',然后重新提交统一文件夹和删除文件夹。 –

1

当你git pull git将按顺序应用提交。因此,即使目录通过最终提交进行合并,它们也不会在提交到HEAD的提交中。我会在Windows机器上尝试新的git克隆。

+0

Git不检查每个单独的提交(一个接一个),它直接检出最终状态。 – robinst

+0

@robinst * apply *!= *退房* – nickgrim

+0

@robinst为了快进,你是对的。但我不认为这是非快进的情况。 –

1

问题可能是Git在旧目录Name被删除之前首先尝试创建新文件(使用新名称name)。因此,当它尝试创建新目录name时,它不会注意到Name已经存在,因为它将它们区分大小写。

你可以尝试以下的(当然是有一个干净的工作目录):

  1. 递归删除my/folder/Name(原来的位置)。
  2. git reset --hard origin/branchname(你正在拉的分支)。

另外,只要做一个新的克隆。

+0

不是。删除了违规目录,并重新设置。仍然是相同的错误信息。 –

+0

@robinst您在这里说的是同样的事情 - 沿途会出现名称冲突,并且新的克隆可能会解决问题。 –

+0

@robinst:一个干净的克隆产生相同的错误。 –