2012-08-09 149 views
19

我需要導出git存儲庫內容並將其導入到目標存儲庫中。我知道有兩種方法可以做到,但它們不能解決我的問題導出包含版本歷史記錄的git

a)將源存儲庫添加爲遠程並對目標執行合併。我不能使用它,因爲這兩個存儲庫不在同一個網絡上

b)使用git archive並將內容複製到目標。在這個git檔案裏,修改信息丟失了。

我需要一些能夠與版本歷史一起存檔的東西,並使我能夠在目標中進行合併。如何才能做到這一點?

回答

40

git bundle提供了這一確切目的。

實施例:

  1. 捆綁其全部源庫

    git bundle create my_repo.bundle --all

  2. 採取``my_repo.bundle '' 到您的目標是

  3. 從你的目標中,加載你的源代碼提交對象

    git bundle unbundle my_repo.bundle

    ...從哪一點可以合併/變基/櫻桃挑選所需的源提交到你的目標倉庫到你的心臟的內容。

    否則,拉動作品一樣的:

    git pull my_repo.bundle

相比於克隆,捆綁更容易轉移,因爲他們是小,因爲你的文件沒有在他們的簽出狀態下進行。

使用捆綁的其他原因:

  • 與使用clone --bare(不籤你的文件),創建 捆綁和打包爲一個單一的文件,這樣就不需要額外的 壓縮/ tarballing。

  • 你也可以簡單地壓縮包源存儲庫(或只是 .git目錄),但你可以攜帶在所有多餘的緩存和 垃圾,根據git的/積聚。

+7

你也可以'git clone my_repo.bundle'。更多信息在http://git-scm.com/docs/git-bundle – jpbochi 2014-03-06 17:39:14

+0

unbundle之前,您需要有一個現有的目標存儲庫,或者通過發出git init命令創建一個新的repo,否則您會得到一個錯誤。 – 2016-10-14 07:23:47

+0

@ LinSongYang新的回購也可以通過從第一條評論描述的方式從包中克隆來創建。 – antak 2016-10-14 07:33:59

0

你想要創建一個當前倉庫的分支。 讓我知道如果我得到這個權利: 你想克隆一個特定的git存儲庫。在克隆上工作,然後將更改合併到原始存儲庫中?

這樣做是爲了創建存儲庫的一個分支,然後從提交更改的原始源提取更改。

+0

源存儲庫不能直接訪問。 (所以不能合併/克隆)是否有任何其他交付機制跨兩個斷開的存儲庫移動更改? – codejammer 2012-08-09 09:41:57

+0

如果源目錄無法訪問,您打算如何從它複製任何文件? – darnir 2012-08-09 09:56:38

+0

必須分發,不能直接訪問 – codejammer 2012-08-10 01:19:53

0

您只需壓縮完整的存儲庫文件夾,然後將其複製到目標工作站(通過USB棒等),然後將該本地存儲庫添加爲遠程存儲庫。然後你可以獲取和合並。

+0

僅供參考:這通常是好的,但有一個主要缺點:您不僅要傳輸數據和歷史記錄,還要傳輸所有設置,如遠程URL或鉤子或工作目錄用戶名和電子郵件等是你不想做的事情。 – quetzalcoatl 2017-06-06 10:54:53

2

Git將存儲庫克隆到U盤,筆記本電腦或其他數據傳輸介質上。鉤到另一臺機器,添加添加媒體作爲一個遠程和拉/合併從那裏的變化...

從存儲庫的任何克隆實際上包含所有的歷史,所以問題是你怎麼能得到克隆到另一臺機器。

另見:this question

+0

所以我們需要克隆然後使用我們自己的歸檔機制,因爲git存檔會跳過.git文件夾嗎? – codejammer 2012-08-09 15:53:08

+0

是的,基本上git-archive可以創建特定修訂版和/或樹的一部分的zip/tarball,但不保留歷史記錄。 – 2012-08-09 18:03:17

+0

謝謝,這個方法適用於我 – codejammer 2012-08-10 01:14:40