我需要導出git存儲庫內容並將其導入到目標存儲庫中。我知道有兩種方法可以做到,但它們不能解決我的問題導出包含版本歷史記錄的git
a)將源存儲庫添加爲遠程並對目標執行合併。我不能使用它,因爲這兩個存儲庫不在同一個網絡上
b)使用git archive並將內容複製到目標。在這個git檔案裏,修改信息丟失了。
我需要一些能夠與版本歷史一起存檔的東西,並使我能夠在目標中進行合併。如何才能做到這一點?
我需要導出git存儲庫內容並將其導入到目標存儲庫中。我知道有兩種方法可以做到,但它們不能解決我的問題導出包含版本歷史記錄的git
a)將源存儲庫添加爲遠程並對目標執行合併。我不能使用它,因爲這兩個存儲庫不在同一個網絡上
b)使用git archive並將內容複製到目標。在這個git檔案裏,修改信息丟失了。
我需要一些能夠與版本歷史一起存檔的東西,並使我能夠在目標中進行合併。如何才能做到這一點?
git bundle
提供了這一確切目的。
實施例:
捆綁其全部源庫
git bundle create my_repo.bundle --all
採取``my_repo.bundle '' 到您的目標是
從你的目標中,加載你的源代碼提交對象
git bundle unbundle my_repo.bundle
...從哪一點可以合併/變基/櫻桃挑選所需的源提交到你的目標倉庫到你的心臟的內容。
否則,拉動作品一樣的:
git pull my_repo.bundle
相比於克隆,捆綁更容易轉移,因爲他們是小,因爲你的文件沒有在他們的簽出狀態下進行。
使用捆綁的其他原因:
與使用clone --bare
(不籤你的文件),創建 捆綁和打包爲一個單一的文件,這樣就不需要額外的 壓縮/ tarballing。
你也可以簡單地壓縮包源存儲庫(或只是 .git目錄),但你可以攜帶在所有多餘的緩存和 垃圾,根據git的/積聚。
你想要創建一個當前倉庫的分支。 讓我知道如果我得到這個權利: 你想克隆一個特定的git存儲庫。在克隆上工作,然後將更改合併到原始存儲庫中?
這樣做是爲了創建存儲庫的一個分支,然後從提交更改的原始源提取更改。
源存儲庫不能直接訪問。 (所以不能合併/克隆)是否有任何其他交付機制跨兩個斷開的存儲庫移動更改? – codejammer 2012-08-09 09:41:57
如果源目錄無法訪問,您打算如何從它複製任何文件? – darnir 2012-08-09 09:56:38
必須分發,不能直接訪問 – codejammer 2012-08-10 01:19:53
您只需壓縮完整的存儲庫文件夾,然後將其複製到目標工作站(通過USB棒等),然後將該本地存儲庫添加爲遠程存儲庫。然後你可以獲取和合並。
僅供參考:這通常是好的,但有一個主要缺點:您不僅要傳輸數據和歷史記錄,還要傳輸所有設置,如遠程URL或鉤子或工作目錄用戶名和電子郵件等是你不想做的事情。 – quetzalcoatl 2017-06-06 10:54:53
Git將存儲庫克隆到U盤,筆記本電腦或其他數據傳輸介質上。鉤到另一臺機器,添加添加媒體作爲一個遠程和拉/合併從那裏的變化...
從存儲庫的任何克隆實際上包含所有的歷史,所以問題是你怎麼能得到克隆到另一臺機器。
所以我們需要克隆然後使用我們自己的歸檔機制,因爲git存檔會跳過.git文件夾嗎? – codejammer 2012-08-09 15:53:08
是的,基本上git-archive可以創建特定修訂版和/或樹的一部分的zip/tarball,但不保留歷史記錄。 – 2012-08-09 18:03:17
謝謝,這個方法適用於我 – codejammer 2012-08-10 01:14:40
你也可以'git clone my_repo.bundle'。更多信息在http://git-scm.com/docs/git-bundle – jpbochi 2014-03-06 17:39:14
unbundle之前,您需要有一個現有的目標存儲庫,或者通過發出git init命令創建一個新的repo,否則您會得到一個錯誤。 – 2016-10-14 07:23:47
@ LinSongYang新的回購也可以通過從第一條評論描述的方式從包中克隆來創建。 – antak 2016-10-14 07:33:59