2011-11-11 76 views
4

所以我傾向於有一個最近克隆的回購協議,我需要在「非常接近」的網絡上工作(經常在本地磁盤上)。還有一個「官方」服務器,我的工作流程真的希望成爲原始服務器,但它通常很慢(或者是因爲它超載,或者在遠程網絡上,或者兩者都有)。將克隆從一個repo&set origin克隆到另一個是否「安全」?

(這個本地回購是官方服務器的一個克隆,可能會過去一兩週過時,但回購非常大,從歷史VCS導入的歷史大約有十年,所以本地克隆從遠程取回要快得多)

如果我git clone -o local /path/to/repo然後git remote add -f origin URI-for-offical-repo我最終會得到同樣的東西(*)git clone URI-for-offical-repo會給我?

我特別警惕任何微妙的差異,可能會使我的回購推動不同。另外,如果我開始使用這種加速克隆的方法,那麼可以使用這種方法制作「本地」回購,也許可以用於多代。

(*)相同加上額外的遠程名稱「local」,以及任何沒有從本地推送到官方服務器的東西。

回答

5

簡答:是的,可能。

長答案:「原點」只是您通常想要推送的別名。只要新的目的地與您從(或空的存儲庫)提取的存儲庫相關聯,並且您有寫入權限,則它應該是安全的。

注意:我沒有真正考慮過你的「僞代碼」命令示例是明智的。但是,克隆的概念,然後改變「起源」的網址是一個明智的概念。當服務器地址已經移動時,我自己做了,或者我決定更改我的公共回購地點等。

請注意,如果新來源不是完全空的存儲庫,或者您的舊克隆本地回購(有沒有比在當地一個較新提交),使用

git push --mirror #e.g. implicitly to "origin" 

可以覆蓋,並在遙控器上丟棄的分支,如果你要它完全寫入訪問。當我不小心將.git/config數據從一個回購庫複製並粘貼到一個不相關的回購庫時,我設法做我自己,[幸運的是,它有很多最新的克隆;但我出汗了幾秒鐘當刪除消息在我的屏幕上滾動;)])

+0

新的來源永遠不會完全空白,而本地回購總是一個較舊的「新」來源克隆(我更新了問題以反映這一點)。我不會做「git push --mirror」,只有「git push」和「git push origin CURRENT-BRANCH」 – Stripes

3

你在做什麼看起來很好,但你可能正在尋找前一段時間添加到git clone的--reference選項。如果存在本地副本,則可以使用參考存儲庫包快速創建新克隆,然後僅從網絡進行更新。例如:git clone --reference ./oldercopy $url newcopy

對於您目前的方案 - 只要樹的相關,切換網址的遙控器沒有問題。如果它們不相關,那麼所有不愉快的錯誤消息都會顯示出來。

+0

這是我的理解,如果您使用--reference並刪除引用的回購(或運行一個gc,或一個過濾器),壞事情可能發生。我真的想避免壞事。 – Stripes

+0

我檢查了這個 - 你是對的。如果參考資料庫消失,您的新克隆就會遇到麻煩。它可以固定,但它看起來很可怕。 – patthoyts