我的 git 存储库出了点问题。我的分支文件夹名称有不同的大小写。git branch -r给我美国/blabla git ls-remote给我我们/blabla这对所有遥远的我们来说都是如此/
为什么会发生这种情况,如何使两个命令返回小写版本?
命令:
git branch -r | grep US/blabla
Run Code Online (Sandbox Code Playgroud)
返回:
origin/US/99867_blabla
Run Code Online (Sandbox Code Playgroud)
命令:
git ls-remote origin US/99867_blabla
Run Code Online (Sandbox Code Playgroud)
回报 nothing
命令:
git ls-remote origin us/99867_blabla
Run Code Online (Sandbox Code Playgroud)
回报
`12312362b8f4e6dc0e1c34880f96d525d2d19d30 refs/heads/us/blabla`
Run Code Online (Sandbox Code Playgroud)
命令:
git branch
Run Code Online (Sandbox Code Playgroud)
回报
* master
Run Code Online (Sandbox Code Playgroud)
Git 本身认为所有大写字母始终与所有小写字母不同。因此,名为 的文件或分支NAME始终不同于名为 的文件或分支name。名为 的文件INCLUDE/IP.H与名为 的文件不同include/ip.h。请注意,这两个名称中都带有斜杠。这里没有名为或 的文件夹,只有名为和 的文件。分支名称也是如此:和INCLUDEincludeINCLUDE/IP.Hinclude/ip.hFEATURE/NAMEfeature/name没有任何文件夹;它们只是两个不同的分支名称。
然而,在不同的时候,Git 会被您的计算机强制将这些文件或分支名称放入您的计算机的文件和/或文件夹名称中。1 如果你的电脑提供的文件系统要求斜杠表示文件夹,此时Git会为你创建一个文件夹,以便保留全名。如果您的计算机提供的文件系统将大小写混为一谈,则NAME和name被视为“同一文件”INCLUDE并且include“同一文件夹”,那么 Git 尝试在此处创建和使用的各种文件和文件夹将混合在一起。
Git 对这些有问题的情况所做的就是让你(用户)感到痛苦。 编写和支持 Git 代码的人们已经做出了各种尝试来让体验不那么可怕,但他们都没有真正解决问题,因为没有一个令人满意的解决方案。 如果可以的话,最好的办法是完全避免这种情况。 如果没有,你必须忍受这种怪异,直到你设法重命名所有东西以摆脱困境糟糕的情况。
\n\n确保在何时或是否使用大写或小写方面保持一致。处理所有这些问题的一种相对简单的方法是获取一个 Linux 系统(或者具有私有文件系统的 Linux VM),或者在您的计算机上创建一个区分大小写的文件系统,这样当 Git 去创建文件夹或文件名为NAME和另一个不同的文件夹或文件名为name,最终会产生两个不同的文件夹/文件。在这个系统上使用 Git可以正常工作,并且让您有机会删除使用“错误”大小写的文件和/或分支。
请记住,在 Git 中,历史记录就是提交。提交包含文件(不是任何文件夹,只是文件,即使它们的名称中包含斜杠),并且这些文件有名称,并且这里的大写字母始终与小写字母不同。旧提交无法更改,因此如果您的文件仅在这些旧提交中的情况下有所不同,那么它们在旧提交中将继续保持这种状态。只需进行问题不再存在的新提交,并避免在存在问题的计算机/文件系统上使用旧提交。如果有必要,您甚至可以通过将旧的有问题的提交复制到避免该问题的新的和改进的提交来“重写历史记录”,然后使您的分支和标记以及其他名称仅记住新的提交。请记住,任何具有旧提交的 Git 存储库都会将它们重新引入到您已修复的 Git 存储库中,因此,如果您重写历史记录,则每个拥有不良历史记录克隆的人都必须以某种方式摆脱不良历史记录\xe2\x80 \x94通常是完全放弃旧的克隆。
\n\n幸运的是,就您而言,问题只是分支名称。不幸的是,分支名称也会通过克隆被复制。幸运的是,它们只是被复制到远程跟踪名称。因此,一旦您解决了痛苦的原始根源,您就可以在每个克隆上删除所有远程跟踪名称,然后重新获取它们,也许可以使用:
\n\ngit remote remove origin\nRun Code Online (Sandbox Code Playgroud)\n\n其次是:
\n\ngit remote add origin <url>\ngit fetch origin\nRun Code Online (Sandbox Code Playgroud)\n\n使用适当的 URL(您可以在执行git remote remove操作之前保存它)。
1由于 Git最终会将有关名为 的分支的信息放入包含名为 的文件的名为 的feature/name文件夹中,因此如果您有名为 的分支,Git 不会让您创建名为 的分支。这适应了这样一个事实:即使在文件名区分大小写的 Linux 系统上,Git 也无法同时创建名为 的文件和名为 的文件。如果 Git 始终将所有分支信息存储在编码名称中,而不是仅仅使用分支名称作为路径名,那么这个特定问题就会像大小写折叠问题一样消失\xe2\x80\x94。我认为,这才是解决所有分支折案问题的正确方法。不过,它对任何文件名大小写折叠问题没有任何作用。featurenamefeaturefeature/namefeature feature/name
| 归档时间: |
|
| 查看次数: |
972 次 |
| 最近记录: |