我更改了目录的大写字母,而Git似乎没有用到它


139

我正在OS X Lion上开发一个受Git版本控制的项目。我有这些小写的目录,然后将它们大写(例如,emailaddresses => EmailAddresses),但是Git似乎无法识别更改。它仍然认为在我运行git ls-files其他命令时目录是小写的。

这是无害的,还是我应该做些其他事情让Git接受这​​一变化?



这让我困惑了两天。现在我懂了。此问题的解答
编号945

Answers:


199

您可能正在使用不区分大小写(但保留大小写)的HFS +。我通常这样处理:

$ git mv somename tmpname
$ git mv tmpname SomeName

1
这是我遇到的同样的问题,这就是我要做的。
fernferret 2011年

3
Github for Windows工具也有同样的问题。上面的解决方案再次很好地解决了这个问题:在Windows Exploer中重命名为临时文件,然后-提交后-以正确的大小写重命名为最终名称。
杰森2012年

9
或做在一个命令:git的MV --force somename SomeName(从stackoverflow.com/a/16071375/217866
jackocnr

1
为了使更改反映在远程仓库中,您还需要git push origin master。如果git拒绝更新遥控器,则可能需要添加一个虚拟文件(例如touch stam)并进行推送。随后删除stam并再次推送。
拉哈夫

2
要注意的一件事是,您需要将文件放在该文件所在的文件夹中,这样才能起作用。起初对我来说这不是很明显,并且我不断得到>>>错误的源,source = somename,destination = tmpname <<<,因为我试图从存储库的根目录运行命令。
Parth Tamane

280

您可以通过运行告诉git考虑到这种情况

git config core.ignorecase false


4
如果您已经在不使用git mv --force或其他一些CL脚本的情况下更改了文件名,那将是一个很好的答案。谢谢!
MeanMatt

4
这是上乘的答案,因为我不太喜欢git mv'ing 200个重命名的文件!
亚当·里斯

1
同意这应该是最佳答案。谢谢。
HomerPlata

1
由于某种原因,它复制了所有文件,现在我既有原始版本,也有大写的版本...
Salatiel

1
@Salatiel我想当您已经在跟踪文件时,它会复制它们。
Iggy

36

如何在Mac上区分大小写git mv

发生这种情况是因为Mac OS X实现了旨在保护您的大小写和不区分大小写的功能。

尽管另一个答案中的双重重命名建议将起作用,但我建议使用“ --force”以获得最佳实践结果:

$ git mv --force somename SomeName


注意:如果您尝试不使用force选项,git会像这样对您发声:

$ git mv somename SomeName
$ fatal: destination exists, source=somename, destination=SomeName

在上面的示例中,git命令失败,并且文件系统或git的索引中没有文件被更改。


根据第一个命令,我得到fatal: not under version control
2015年

该致命错误意味着您在该位置没有GIT存储库。git命令仅在具有GIT存储库的目录中起作用。
David Manpearl

但是我在我的Git存储库的子目录中……最后,我通过Taran的答案 BTW 解决了它。谢谢。
2015年


4

以下步骤帮助我解决了该问题:

  1. 将文件夹重命名为temp

    mv Folder temp                  // It will rename your Folder to temp
    
  2. 阶段和提交:

    git add .
    git commit -m "Temp"
    
  3. temp文件夹重命名为您的选择:

    mv temp folder        // It will rename temp folder to the name of your choice(folder)
    git add .
    git commit -m "Folder Fixed"
    

完成-现在可以推送了。


1

如果你这样做git mv AAA aaa或者git mv -f AAA aaa,它不会工作,你将有错误fatal: renaming 'AAA' failed: Invalid argument

因为AAAaaa是不区分大小写的文件系统上的ONE SAME文件夹/文件,所以移动AAAaaa表示移动AAAaaa/AAA

所以你应该做

git mv AAA aaa.1
git mv aaa.1 aaa

希望对您有帮助。


1

原因是基于LINUX的OS或macOS忽略文件/文件夹名称的区分大小写。我们需要通过以下步骤解决此问题

For Exp, you want to change folder name from Base to base
1. mv Base base2
2. git add . && git commit -m "Fix folder name problem (wip)"
3. mv base2 base
4. git add . && git commit -m "Fixed folder name problem"

0

这些解决方案都不适合我。SourceTree总是使用与我想要的情况不同的情况创建我的分支。所以我如何解决的是:

1-在finder上查看您的git文件。您可以通过在终端上键入以下内容来做到这一点:

- `defaults write com.apple.finder AppleShowAllFiles TRUE`
- `killall Finder`

2-重新启动查找程序并转到您的项目目录

3-现在只需更改文件夹名称,例如,从Feature到feature。然后你去。



0

我有同样的问题,请使用下面的解决方案。我将其用于批处理,目录和文件重命名等:

git rm -r --cached .
git add --all .
git commit -a -m "Versioning updated directory/file names"
git push origin master

如此处详述。


0

这些都没有真正帮助我,我仍然让git告诉我存储所做的更改,因为我的情况是我的本地文件夹大写,但远程没有大写,并且我的分支在后面,并且由于文件大小写的差异我不再能够拉在文件夹结构中。

我可以解决此问题的唯一方法是删除本地分支并签出远程服务器。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.