代码之家  ›  专栏  ›  技术社区  ›  vmonteco

git的历史可以被伪造吗?

  •  2
  • vmonteco  · 技术社区  · 7 年前

    git的历史可以被伪造吗?

    • 提交日期
    • 委员身份

    如果是:

    • 如何知道git历史记录是否被修改?
    3 回复  |  直到 7 年前
        1
  •  3
  •   cmaster - reinstate monica    7 年前

    您提到的所有字段都是用于标识提交的SHA-1的一部分。 新的承诺意味着,不 git 实现将接受重写的提交作为原始提交的替代,除非您强制它这样做。

    吉特 commit ID,这是到目前为止所有开发历史的加密散列,以及包含的所有作者信息。数据的任何变化都是可以检测到的。

    git commit -S .

        2
  •  1
  •   mrks    7 年前

    How to add a changed file to an older (not last) commit in Git

    但是,由于每个提交的SHA-1散列包含父提交的散列,这将更改以下所有提交的散列。

    有没有办法对git repo的内容进行身份验证或使其可验证?

    你可以 sign commits using GPG ,但这仅标识作者。如果作者有恶意,这就引出您的第二个问题:

    如何知道git历史记录是否被修改?

    master 指向过去,因此您无法轻松区分常规分支和“修改”历史。你也许可以检查 rev-log 任何看起来奇怪的事情。

        3
  •  0
  •   azbarcea Mahesh YL    7 年前

    如果您有权访问历史记录,则可以更改所有版本控制系统(clearcase、subversion、CVS、git)的历史记录。Git正在分发,您拥有整个历史的副本(即fork)。你可以改变历史(参见 @mrks ^1 回答)仅限您自己的叉子。

    --force 因此,您可以覆盖目标历史记录:

    • onlyif远程分支未设置为只读

    这通常是组织中为避免其他用户覆盖历史而创建的。通常只有与主生产历史路径相关的分支(例如分支=生产、生产、主等)。这将是定义工作流的一部分。

    许多组织 ^2 例如,具有github镜像的用户可以使用此设置,以确保github本身(有意或无意)不会覆盖历史记录。