在多个遥控器上Git不同的历史

时间:2017-06-29 10:31:03

标签: git git-remote

我正在使用两台远程服务器。

是否可以创建不同的历史起点?

例如:

Remote 1: commit1 -> commit2 -> commit3 -> commit4

Remote 2: commit3 -> commit4

在这种情况下,我希望commit3成为远程2的历史起点。

2 个答案:

答案 0 :(得分:1)

在您描述的情况下,回购2是"浅"库。如果你有Repo 1

A -- B -- C -- D

然后你可以创建repo 2作为

git clone --mirror --depth=2 --no-single-branch file://localhost/path/to/repo1 repo2

现在回购2是

C -- D

在此仓库中,您可以看到C有父级,您可以看到B的SHA ID被列为C的父级;但是提交B本身(及其历史)不存在。

我使用了mirror,因为您将其描述为第二个遥控器。所以这使它裸露并将分支设置为本地分支而不是远程分支引用。根据您的需要,您可以创建一个不是镜像(有或没有--bare)的浅层仓库。真正的关键是depth段。

默认情况下,depth仅复制一个分支将repo配置为仅更新特定分支的引用参考。 no-single-branch恢复映射所有引用的正常行为。也就是说,如果Repo1中存在大量或复杂的历史记录,那么获得您想要的内容可能并不像我在此处所展示的那样简单。

请注意,如果您使用本地路径,则会忽略depth;这就是为什么我使用上面的file://网址。

这绝对是一个特例。提交的标识对其完整历史进行编码(这是查看C必须"知道"其父SHA ID的原因的一种方式,因此通常具有不同的历史意味着具有不同的历史在回购1中提交(可能恰好具有类似的TREE s)而不是在回购2中;所以他们不能作为一个单一,连贯的本地回购的遥控器共存。但在特定情况下,您只想将最早的历史排除在某一点之外,现代git提供了这种解决方案。

答案 1 :(得分:-1)

如果要在同一本地存储库中执行此操作,则不能。

如果您将存储库克隆两次,则可以。为第一个遥控器保留第一个克隆,第二个克隆用于第二个遥控器。 在第二个克隆中,您需要重写历史记录:https://git-scm.com/book/en/v2/Git-Tools-Rewriting-History

这是我想到的唯一解决方案。您将无法为同一存储库(本地/远程)创建不同的历史记录。