2017-06-29 36 views
0

我使用兩臺遠程服務器。Git不同的歷史在多個遙控器

是否有可能創建不同的歷史起點?

例如:

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

Remote 2: commit3 -> commit4

在這種情況下,我想commit3能夠在遠程2.

回答

1

在你描述的情況下,回購2是一個「淺」存儲庫。如果你有回購1

A -- B -- C -- D 

,那麼你可以創建回購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拷貝單個分支配置回購僅僅是特定分支對裁判獲取更新。 no-single-branch恢復映射所有引用的正常行爲。也就是說,如果在Repo1中有大量或複雜的歷史記錄,那麼準確地包含您想要的內容可能並不像我在這裏展示的那樣容易。

請注意,如果您使用本地路徑,depth將被忽略;這就是爲什麼我使用上面的網址file://

這絕對是一個特例。提交的身份對其完整歷史進行編碼(這是查看爲什麼C必須「知道」其父母SHA ID的一種方式),因此通常具有不同的歷史意味着在回購中具有不同的提交(可能碰巧具有類似的TREE) 1比回購2;所以他們不能共存作爲一個單一的,連貫的本地回購的遙控器。但在特定的情況下,你只是想排除最早的歷史,現代git提供了這個解決方案。

-1

你可以,如果不是你想要的歷史起點在同一本地存儲庫上執行此操作。

如果您克隆存儲庫兩次,您可以。保留第一個遠程的第一個克隆,第二個克隆將保留第二個遠程。 在第二個克隆中,您需要重寫歷史記錄:https://git-scm.com/book/en/v2/Git-Tools-Rewriting-History

這是我唯一想到的解決方案。您將無法爲同一個存儲庫(本地/遠程)創建不同的歷史記錄。