【问题标题】:Git: file name reverted to legacy name after each clone [duplicate]Git:每次克隆后文件名恢复为旧名称[重复]
【发布时间】:2017-08-20 16:28:14
【问题描述】:

我曾经有一个名为 ViewMVC.java 的文件,其中包含 ViewMVC 类的声明。

后来,我决定将课程重命名为ViewMvc。结果,文件名更改为ViewMvc.java。我很久以前就把这个更改推送到远程了。

我面临的问题是,当我克隆远程仓库时,文件被拉为ViewMVC.java(类名是ViewMvc,正如预期的那样)。换句话说 - 由于某种原因,文件的名称被恢复为旧名称。

我尝试再次更改名称并推送到远程,但问题并没有通过这种方式解决。

任何想法为什么会发生这种情况以及如何解决这个烦人的问题?

【问题讨论】:

  • 您使用的是什么操作系统?我想知道 Windows 不区分大小写的文件系统是否在混乱中发挥了作用......
  • @MarkAdelsberger 我正在使用混合。我的台式机是 Windows,笔记本电脑是 OSX,现在我正在尝试在 centOS 上启动持续集成服务器。但我倾向于相信更改文件名的原始提交是在 Windows 上进行的......
  • 默认情况下Windows和OSX都使用不区分大小写的匹配,所以MVCMvc同一个文件。 Git 有一个配置旋钮,core.ignoreCase,告诉它是相信那些是相同的文件还是不同的文件。简单地调整旋钮是不够的,因为 Git 对旋钮的使用是为了感知操作系统将如何处理它,并且您需要 both Git 操作系统来区分大小写-敏感的(就像 CentOS 一样)在这里。至于修复它的最佳方法,好吧,我避免使用 Windows;我可以在 OSX 上测试,但没有,所以不知道。

标签: java git


【解决方案1】:

根据 cmets 中的讨论,我认为问题在于,当您重命名文件时,git 实际上并没有认为您更改了任何内容。您希望它看到ViewMVC.java 已删除,ViewMvc.java 为一个新文件(它有时会报告为ViewMVC.java renamed to ViewMvc.java),但我猜是因为它只是说不区分大小写设置“不,没有任何改变这很重要。”

那么,问题在于树对象 - 本质上是一个读起来像目录列表的文本文件 - 仍然具有旧的大写字母。同样由于不区分大小写的设置,如果工作树中以这种方式存在,它会很高兴地使用不同的大小写来处理文件;但在克隆时,它默认为树对象中的大写。

所以, 你必须让它更新树对象(最好是在你关心的每个提示提交中)。

在具有区分大小写 fs 的系统上(并相应地设置了 git 配置),您可以简单地克隆 repo,移动文件(再次)git add .,使用 git status 确认它看到重命名,然后提交.

要在 Windows 系统上修复它,我唯一能想到的尝试就是删除文件,提交,然后使用正确大写的文件名重新创建文件并再次提交。

【讨论】:

  • “重新创建”,当然,我的意思是git checkout HEAD^ -- ViewMVC.java,重命名文件,然后git add 等等
  • 很好的解释。我最终只是在 centOS 机器上更改名称并推送更改。
【解决方案2】:

每当有人重命名同名文件但大小写不同时,我们的项目就会不时发生这种情况。

这是因为git默认不区分大小写,你可以在设置中更改它,但最简单快捷的解决方案是将文件重命名为 ViewMvc1.java > commit and push > rename again to ViewMvc.java > commit and推。

【讨论】:

    猜你喜欢
    • 2011-02-10
    • 2016-09-02
    • 2020-03-04
    • 1970-01-01
    • 2011-01-05
    • 1970-01-01
    • 2020-10-28
    • 2022-01-02
    • 1970-01-01
    相关资源
    最近更新 更多