gpt4 book ai didi

Git-修改 .git refs 目录中的提交数据有什么危险

转载 作者:太空狗 更新时间:2023-10-29 14:27:45 25 4
gpt4 key购买 nike

我创建了一个 git 存储库来测试一些 git 功能。我从一篇博文中了解到,分支存储在 .git/refs/heads/ 中,文件名是应用程序中分支的名称,每个文件都包含分支指向的提交 sha。

事实证明,您可以将提交 sha 替换为 .git 存储库中存在的任何提交 sha。当我这样做并且成功时,我心想这真的是错误的,我不应该这样做,但我只能想到其中涉及人为错误。所以我的问题有两个方面。

  1. 在 git branch/ref 文件中替换提交 sha 有哪些危险?

  2. 是否有曾经您想直接修改.git 文件夹中的分支文件的情况?而不是使用 git 命令来执行这些行为。

最佳答案

Git 改变它做这些事情的方式的 future 风险很大。这并不是特别不可能,因为 Windows 上的 Git 在分支名称大小写方面存在问题,例如分支名称 aA在 Linux 和 Git 中是两个不同的分支名称,但在 Windows 上存储在同一个文件中。当分支名称为packed(存储在.git/packed-refs中——查看文件可以看到,尤其是在运行git gc之后),这两个分支在Windows上也是不同的。当分支名称被解包时,两个分支名称变成一个,结果相当困惑。

除了 future 的风险,最大的危险是将原始哈希 ID 转储到 .git/refs/heads/branchname 中file 是你可能会弄错的:它可能是一个伪造的哈希 ID,或者它可能是一个不是提交对象的对象的哈希 ID。 Git 的正常操作不允许这些,因此 Git 的各种内部位可能假定分支文件内容是指向提交对象的有效哈希 ID。

否则,这正是git reset --soft <em>commit-specifier</em>使用任何分支名称HEAD附加到,正是git branch -f <em>name</em> <em>commit-specifier</em>使用 HEAD 的分支名称未附加。因此,如果您的目标是在不使用该命令的情况下模拟这两个命令之一,您可以做到这一点(至少在今天,直到 Git 对 Windows 和类似操作系统上的名称大小写问题采取措施).

至于这个:

Is there ever a situation where you would want to directly modify the branch files in the .git folder?

它对实验很有用(测试源代码对 Git 的更改,例如,如果您想查看是否修复了分支名称中包含无效哈希 ID 时发生的崩溃)。如果 Git 自己的内部安排已经损坏,它偶尔可能在系统崩溃后有用。

关于Git-修改 .git refs 目录中的提交数据有什么危险,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49371946/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com