gpt4 book ai didi

git:从某个提交开始发布,将早期历史保密,但可证明

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

我已经在一个库上工作了很长一段时间,并且在我的 private 存储库中有很多提交:

A -> B -> C -> D -> E

最后,我即将完成第一个版本,并希望将它发布到一个名为 public 的远程服务器,从 D 开始保持 A..C 我自己,所以 public 之后应该是这样的:

D -> E

根据需要,我希望能够证明我是如何得出 D 的(想想版权声明等)。因为(目前)几乎不可能用时间和变更集对链中提交的哈希进行逆向工程,我想只是保持 D 的父指针指向 C 将是 git 的天才优势之一。可悲的是,我找不到真正实现这项工作的方法。

那么,我怎样才能将 D -> E 推送到 public 使其成为一个功能齐全的公共(public)存储库,其中包含所有必要的对象以 check out DED 仍然指向 C 作为父级?

什么不起作用:

范围推送

git push public D..E:master
error: src refspec D..E does not match any.
error: failed to push some refs to '<public>'

任何形式的压缩/历史重写

据我所知,压缩 A..D 会引入一个新的提交,删除指向 C 的父指针,从而消除 A 存在的可证明性..C。 (简单的例子:假设 C 反转了 B,那么你永远无法证明 B 在某个时候在那里。)

我显然可以在 squash 提交的描述中手动记下 C 的哈希,但是已经有一个 parent 指针字段,为什么不使用它呢?

此外,为了对公众做出进一步的改变,我必须在这个新的压缩提交之上重新设置我的私有(private)分支,这似乎是错误的......

从有限深度的本地克隆推送

我想我找到了一个解决方案,首先创建一个具有所需深度的本地克隆 local_public,然后将该克隆推送到 public,如下所示:

git clone --depth 2 file:///<abspath_private> local_public

git log --pretty=raw

我可以验证 local_public 只包含 D -> E 并且提交、树和父哈希是相同的,这正是我想要的。

问题是,当我尝试从 local_public 推送到添加的 public 远程时,我收到如下错误:

 ! [remote rejected] master -> master (shallow update not allowed)

有什么想法可以实现吗?

最佳答案

你想要的不可能

Git 中的提交就像链表一样工作。每个提交都有父提交的 ID(如果是根提交,则为 null)...父提交的 ID 是提交标识的一部分。

要将 D -> E 推送到存储库,您需要修改 D 的父级,这将导致 D 的哈希值发生变化,这反过来又需要 E 的哈希值也发生变化(因为 E将有一个新的 parent )。

关于git:从某个提交开始发布,将早期历史保密,但可证明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34108912/

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