Linux Git合并已分离的目录

Linux Git合并已分离的目录,linux,git,symfony,merge,tortoisegit,Linux,Git,Symfony,Merge,Tortoisegit,不太清楚该如何解释清楚,但接下来是 由于乌龟git中的一个bug,我们以这样的情况结束 我们所有的代码都应该在这样的目录结构下(这是Symfony2项目) 但是,由于(我们认为)TortoiseGit中的缺陷,当我们将代码拉到linux机器上时,我们得到了 src/XYZ/OurExcitingBundle src/XYZ/AnotherExcitingBundle src/xyz/ourexcitingbundle src/xyz/anotherexcitingbundle (即实际目录,加

不太清楚该如何解释清楚,但接下来是

由于乌龟git中的一个bug,我们以这样的情况结束

我们所有的代码都应该在这样的目录结构下(这是Symfony2项目)

但是,由于(我们认为)TortoiseGit中的缺陷,当我们将代码拉到linux机器上时,我们得到了

src/XYZ/OurExcitingBundle
src/XYZ/AnotherExcitingBundle
src/xyz/ourexcitingbundle
src/xyz/anotherexcitingbundle
(即实际目录,加上一个小写等效项)。使我们的项目的文件似乎在CamelCase和小写目录之间随机分割

当我们在Windows机器上开发时,这在编码时并不重要,但当代码被推送到linux服务器时,一切都会崩溃,因为文件不在它们应该在的位置,或者文件存在于CamelCase目录中,但较新的版本在小写目录中

所以,我的问题是,有没有一种方法可以将小写目录中的所有文件“合并”到CamelCase目录中它们的等价物中,最终只在CamelCase目录中找到所有最新的代码


非常感谢您的帮助。

这里有两件事要做。确保windows上的每个客户端都具有

core.ignorecase = true 
在每个存储库上设置。这意味着git将忽略本地大小写的任何差异,并且应该使用与本地存储库中使用的大小写相同的大小写

其次,需要在存储库中更改所有间距不正确的路径。这有一个副作用,那就是团队将不得不撤销这个新版本的历史记录。
过滤器分支
命令通常用于此类任务。这将类似于:

git filter-branch --tree-filter 'test -d src/xyz && for f in `git ls-files src/xyz`; do git mv "$f" src/XYZ; done'
还对Tortoise Git进行了更改,以改进对处理案例敏感性的支持:


因此,检查您正在使用的版本也是值得的

多谢各位。我们尝试了您建议的一切,但唯一有效的方法是手动将所有内容从大小写不正确的目录移动到正确的目录中。这个问题没有再发生,所以我怀疑是因为使用了旧版本的乌龟。
git filter-branch --tree-filter 'test -d src/xyz && for f in `git ls-files src/xyz`; do git mv "$f" src/XYZ; done'