- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我已经在一个库上工作了很长一段时间,并且在我的 private
存储库中有很多提交:
A -> B -> C -> D -> E
最后,我即将完成第一个版本,并希望将它发布到一个名为 public
的远程服务器,从 D
开始保持 A..C
我自己,所以 public
之后应该是这样的:
D -> E
根据需要,我希望能够证明我是如何得出 D
的(想想版权声明等)。因为(目前)几乎不可能用时间和变更集对链中提交的哈希进行逆向工程,我想只是保持 D
的父指针指向 C
将是 git 的天才优势之一。可悲的是,我找不到真正实现这项工作的方法。
那么,我怎样才能将 D -> E
推送到 public
使其成为一个功能齐全的公共(public)存储库,其中包含所有必要的对象以 check out D
或 E
和 D
仍然指向 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/
根据这个link ,注册 token 必须保密。 Registration token: An ID generated by the FCM SDK for each client app inst
我想使用 GitHub API 创建一个开源项目,但我遇到了一个问题,我的 key 在源代码中。我从不同的地方读到从不在源代码中包含任何 key ,我同意这一点。我还发现了一些关于通过网络服务器进行身
对,我说的是桌面应用程序中的许可证验证代码,例如一种方法bool ValidateLicense(string licenseCode) .当然,任何保护方案都可以由熟练且坚定的破解者进行逆向工程。但
我正在使用 Giphy 的 API,目前有一个开发 key 。我想部署我的网站,但不知道它是面向公众的 key 还是私有(private) key ,并且无法在网上找到答案,也无法直接询问他们。 最佳
我正在尝试在我的个人项目中使用亚马逊网络服务。我已经获取了他们的 AWS SDK for .NET 并正在使用它,但我有点困惑。 通过私钥/公钥对访问 Web 服务(在本例中为 SimpleDB,但我
我是一名优秀的程序员,十分优秀!