2009-10-20 40 views
3

我们工作在混合大小写敏感/不敏感的环境(cywgin/linux),今天有人通过重命名文件,将S更改为s,在我们的工作流程中造成了一次小破坏。这导致各分支机构出现各种有趣的合并问题,而且相当诚实,没有人完全确定发生了什么。如何更改cygwin下git中的文件大小写?

在git中为cygwin更改文件框的最合适的方法是什么?我必须强调,我们大小写敏感的,通常这样做的权利 - 如果它不是为S.

+1

我从来没有在cygwin下使用git - git mv没有正确检查重命名吗? – Cascabel 2009-10-20 19:07:26

回答

2

已经想了几分钟,它似乎很可能会git-mv你需要什么。我确信它会尝试重命名(这可能是不区分大小写的操作系统上的禁用操作),然后将重命名添加到索引。这应该基于参数,而不是实际的文件 - 我在内建mv.c中看到rename_cache_entry_at(pos, dst);

我不知道这是否是你问或不是的一部分,但相对于你的分支混乱,这里就是你可能要采取的一般方法:

  • 提交重命名修复到所有“最下行”的分支。这些可能是主题和维护分支 - 合并到其他分支的分支,但从未将分支合并到它们中
  • 按照正常的工作流合并这些分支,修复可能由重命名引起的任何冲突。
  • 鼓励大家尽快拉动,以防万一问题有办法进一步传播。例如,某人可以在重命名的文件上工作,然后拉,并以错误的方式修复重命名冲突,从而导致在推/拉时重新创建问题的状态。
+4

对于其他谁发现这一点,您将需要使用“git mv -f”来强制重命名,因为Cygwin会抱怨源和目标是相同的。 – 2010-06-07 15:31:52

1

我想指出,作为一个后备你可以操纵在索引条目(临时区域),从你就可以用“git的承诺”承诺在哪里(而不是“git的承诺-a “)与git update-index管道(低级别)命令。

3

我刚刚遇到类似这样的问题,我只是想将目录'脚本'重命名为'脚本'。我目前在Cygwin工作,所以它不是那么容易。如果我尝试像在GNU/Linux中那样做,我会得到一个错误。

$ git mv foo Foo 
fatal: renaming foo failed: Invalid argument 

不过,我意识到我可以绕过我以为是什么Windows的缺点,通过移动了两次,第一次是不冲突的名称,然后到实际所需的名称。

$ git mv foo Foo2 && git mv Foo2 Foo 

我藏了我的工作树离开了这个变化,虽然这样我就可以单独的提交,并通过明显,因为现在我搬到无法从藏匿合并目录下的文件没有想到事情我树。 : - /在我的情况下,这是一个小问题,虽然(为了安全起见,我在尝试这个之前先对树进行了标记,但我总是可以用强有力的非版本化的方式来做它:P)。