我正在使用两台远程服务器。
是否可以创建不同的历史起点?
例如:
Remote 1: commit1 -> commit2 -> commit3 -> commit4
Remote 2: commit3 -> commit4
在这种情况下,我希望commit3成为远程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
这是我想到的唯一解决方案。您将无法为同一存储库(本地/远程)创建不同的历史记录。