两个具有不同历史记录的git遥控器
我们有一个内部的公司github存储库,我们希望尽快将其开源。为了安全地执行此操作,我们希望在首次推出公共回购时删除git历史记录。因此,我们需要:两个具有不同历史记录的git遥控器,git,github,Git,Github,我们有一个内部的公司github存储库,我们希望尽快将其开源。为了安全地执行此操作,我们希望在首次推出公共回购时删除git历史记录。因此,我们需要: 创建一个公共回购,我们将其作为第二个远程回购添加到本地github回购 将本地代码的历史截断版本推送到公共回购协议 确保所有后续承诺均以本地回购和公共回购结束 例如,如果初始公共推送时的本地历史为: A -> B -> C -> D 那么,首次推出后的公开回购应该如下所示: D 添加两个新提交(E和F)后,两个回购协议应分别如
A -> B -> C -> D
那么,首次推出后的公开回购应该如下所示:
D
添加两个新提交(E和F)后,两个回购协议应分别如下所示:
本地:
A -> B -> C -> D -> E -> F
公众:
D -> E -> F
我们如何才能尽可能轻松地同时实现所有这些功能?我意识到有很多关于截断历史记录或拥有多个遥控器的问题/答案,但我还没有发现关于这两个功能的任何信息。一个解决方案是为公共回购创建初始提交,并使用
git replace--graft
将您的内部历史和公共历史绑定在一起。我个人认为,在类似于您在问题中所描述的情况下,此解决方案非常好。在这种情况下,历史记录如下所示:
内部Github回购中的历史记录:
A -> B -> C -> D -> I (replaced) -> E -> F
I -> E -> F
公共Github回购协议中的历史记录:
A -> B -> C -> D -> I (replaced) -> E -> F
I -> E -> F
其中提交E
和F
是新的发展,而I
是公开回购的初始提交
实现这一点的步骤(假设母公司是所有回购协议的主要分支机构):
- 在声明点,您处于提交
D
- 将文件复制到新文件夹中,并为您的公共repo创建初始提交
I
- 将初始提交推送到您的(空)公共回购
- 返回旧的本地回购并添加新的公共远程回购
- 将初始提交从公共回购拉到新分支
- 检查提交
和D
I
- 运行
git replace--graft hash_of_commit_I hash_of_commit_D
- 运行
时,您将看到refgit show ref
refs/replace/*
将在提交时显示git日志
标记replaced
I
- 将新分支合并到主分支(
到主分支)I
- 将新引用推送到内部回购
git推送到内部远程“refs/replace/*”
- 将初始提交推送到您的内部回购
git推送内部\u远程头:master
- 此时,您可以删除新分支
- 推送到公共回购不应该做任何事情,只有初始提交
,没有以前的历史记录I
- 现在,您可以进行新的开发,并在不破坏历史的情况下推动这两个远程设备李>
git提交
git推送内部\u远程主机
git-push-public\u远程主机
- 一种解决方案是为公共回购创建初始提交,并使用
git replace--graft
将内部历史和公共历史绑定在一起。我个人认为,在类似于您在问题中所描述的情况下,此解决方案非常好。在这种情况下,历史记录如下所示:
内部Github回购中的历史记录:
A -> B -> C -> D -> I (replaced) -> E -> F
I -> E -> F
公共Github回购协议中的历史记录:
A -> B -> C -> D -> I (replaced) -> E -> F
I -> E -> F
其中提交E
和F
是新的发展,而I
是公开回购的初始提交
实现这一点的步骤(假设母公司是所有回购协议的主要分支机构):
- 在声明点,您处于提交
D
- 将文件复制到新文件夹中,并为您的公共repo创建初始提交
I
- 将初始提交推送到您的(空)公共回购
- 返回旧的本地回购并添加新的公共远程回购
- 将初始提交从公共回购拉到新分支
- 检查提交
和D
I
- 运行
git replace--graft hash_of_commit_I hash_of_commit_D
- 运行
时,您将看到refgit show ref
refs/replace/*
将在提交时显示git日志
标记replaced
I
- 将新分支合并到主分支(
到主分支)I
- 将新引用推送到内部回购
git推送到内部远程“refs/replace/*”
- 将初始提交推送到您的内部回购
git推送内部\u远程头:master
- 此时,您可以删除新分支
- 推送到公共回购不应该做任何事情,只有初始提交
,没有以前的历史记录I
- 现在,您可以进行新的开发,并在不破坏历史的情况下推动这两个远程设备李>
git提交
git推送内部\u远程主机
git-push-public\u远程主机