【问题标题】:Can't push to new repo : The folder pushed differ in case无法推送到新仓库:推送的文件夹以防万一
【发布时间】:2021-05-15 08:16:12
【问题描述】:

在深入探讨这个问题之前,先来一点背景知识:

几个月前,我的团队将我们的存储库从 Team Foundation Server 迁移到 Azure DevOps。 上周,我们注意到 TFS 上的一个分支已经完成了现在需要的工作。因此,我们决定将该分支带到 Azure,以避免再次进行上述工作。

我在我的机器上从 TFS 克隆了 repo,更改了原始 url 以匹配 Azure 的 URL,然后尝试通过以下步骤推送分支:

  1. 从 TFS 克隆
  2. 从我感兴趣的分支创建一个新分支
  3. 添加远程源(称为 origin-azure)
  4. 添加一个虚拟文件并提交更改
  5. 将分支推送到 origin-azure

它给了我以下错误信息:

error: remote unpack failed: error The tree object 1234 was rejected: The folder 'myfolder' and the folder 'MyFolder' pushed differ in case. You must remove or rename one of them or disable case-enforcement (see https://aka.ms/git-platform-compat). To https://urlOfRepoOnAzure ! [remote rejected] ExportBranche -> ExportBranche (The tree object 5678 was rejected: The folder 'myfolder' and the folder 'MyFolder' pushed differ in case. You must remove or rename one of them or disable case-enforcement (see https://aka.ms/git-platform-compat).) error: failed to push some refs to https://urlOfRepoOnAzure

我删除了文件夹“myfolder”并再次尝试。同样的错误。 但我可以毫无问题地推送到 TFS。

我不明白发生了什么。尤其是为什么推到 Azure 被拒绝,因为我正在推一个新的分支。

【问题讨论】:

  • 这是微软添加到他们系统中的一项特殊功能。没有正常的 Git 通知或关心。事实上,普通的 Git 不会注意到或关心 对于 Windows 用户来说是个问题(并非总是如此,但通常足以引起关注),这就是他们添加此功能的原因。如果此功能妨碍您完成工作,并且您很乐意让 Windows 用户遇到麻烦,请关闭此功能。
  • 嗨@torek,我确保远程仓库和本地仓库上的文件夹名称和大小写相同,但我仍然收到错误消息。此外,如果我创建 find myfolder 则不会返回任何结果。所以我应该没有任何问题推送到远程,因为文件夹在两边都有相同的名称。
  • 问题不在您的工作树中。它是在您正在上传的某些 commit 中。请记住,Git 不存储文件。 Git 存储 commits(然后存储文件)。每个提交都有每个文件的完整快照。您有一些具有大写名称的提交和一些具有小写名称的提交,这就是 Microsoft 添加的特殊功能检测到的。
  • 感谢@torek 的解释!我忘记了真正的承诺是什么!尽管如此,关闭该功能后,我还是无法推送到新的原点(仍然是错误)。我们最终使用了与@WaitingForGuacamole 提出的相同的解决方案。
  • 是的,这是解决问题的一种方法。新奇的git filter-repo 可能也有一些功能,或者可以添加一个:它具有能够解决这个问题的正确洞察力,并且作为一个 Python 程序,做到这一点应该不会太难.

标签: git azure tfs


【解决方案1】:

我同意@BernardoDuarte 的观点,您应该能够更改有关案件执行的政策,但如果它不起作用,我会尝试通过进行更多手动更新来摆脱整个冲突:

  1. 将 TFS 存储库克隆到一个全新的文件夹中
  2. 签出您希望从 (A) 迁移的分支
  3. 将 Azure DevOps 存储库克隆到一个不同的全新文件夹中
  4. 创建主题分支(B)
  5. 将除 myFolder 之外的所有文件夹从 (A) 复制到 (B)
  6. 在 (A) 中打开 myFolder,并将其所有内容复制到 (B) 中的 myFolder
  7. (B) 中的 git status 以确保 myFolder 的文件夹大小写与 Azure DevOps 存储库中的相同。
  8. 提交并将您的主题分支推送到 (B)
  9. 在 Azure DevOps 中拉取你的主题分支,然后完成它。

如果您覆盖 myFolder 本身,Git 将跟踪它作为更改并尝试推送它。这种方法虽然很笨拙,但可以防止这种变化发生,并且应该绕过这个问题。

【讨论】:

  • 嗨@WaitingForGuacamole,这是我们今天早上最终解决错误的方法,效果很好:) 谢谢你的回答;)
  • 希望它更容易!
  • 好吧,在阅读了@torek 对初始帖子的回复之后,似乎是一个较旧的提交将所有内容都送入地狱。所以我认为有可能从历史记录中删除上述提交并获得一些干净的东西来推送到新的遥控器。也许并不容易,但似乎更有趣!
【解决方案2】:

您可以尝试关注 this link 并更改 Azure Repos 上有关案例执行策略的存储库设置。

【讨论】:

  • 嗨@Bernardo Duarte 我已经尝试过使用此设置,但没有任何运气。我还尝试使用 git mv -f 将文件夹“myfolder”重命名为不同的名称,但出现错误“致命:错误来源”
猜你喜欢
  • 2011-07-26
  • 1970-01-01
  • 2014-10-21
  • 2018-09-13
  • 2021-08-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-22
相关资源
最近更新 更多