2010-05-03 32 views
8

我是git的新手,我從一個長期運行的項目中獲得了大量的每週tarball。每個tarball平均有幾百個文件。我正在尋找一個git策略,允許我將每個tarball的擴展內容添加到新的git存儲庫,從版本1.001開始並通過版本1.650。在項目的這個階段,99.5%的tarball(n)只是版本(n-1)的一個副本 - 換句話說,是git的完美候選人。期望的最終結果是僅在過程結束時保留主分支。有沒有方法可以輕鬆地將源碼樹的一系列tarball轉換爲git存儲庫?

我認爲我知道git足夠做到「手工」。據我瞭解,不存在合併衝突的可能性,因爲在添加和提交下一個版本之前,沒有機會改變主設備。 shell腳本是我的第一個猜測,但我不確定bash在branch_n-1中執行bash時如何處理git checkout branch_n會如何。對於本項目而言,主機環境爲Ubuntu 10.4,可用資源爲8 Gig RAM,500 GB的磁盤空間,以及3.ghz的4 CPU處理器。

我不需要別人來解決這個問題,但我可以用正確的方向推動git專家如何接近它。任何意見來自「誰在那裏做過」的人將不勝感激。

布袋

PS:我已經看過現場的建議「相關問題」,沒有發現任何有關。

+0

這些問題的答案都指向的是分支不應該是必要的。但是,您可能希望創建標籤,這些標籤是固定指向提交的指針,常用於標記版本號。 – Cascabel 2010-05-03 17:37:34

回答

3

對此評論:當你關注的兩個混帳結賬branch_n被同時bash是以branch_n-1

執行處理

我不知道還有慶典怎麼會喜歡同時運行並進入彼此的方式?除非您有意並行運行操作,否則這不應該成爲問題。

假設tarball遵循線性演化,分支不應該進入這個。

的過程應該是相當簡單:

  1. git init
  2. untar ball _n_
  3. git add --all .; git commit(在適當的標誌)
  4. git tag -a v1.001 -m "Version 1.001."
  5. rm -rf *(處理缺失的歷史;要當然離開.git完好無損)
  6. 轉到2
+0

也許'有關'不是正確的詞。如果git從bash中取出$ PWD,我「不確定會發生什麼」。 也許bash不這樣做,但很久以前我依稀記得讀過sh創建了一個作爲文本文件在某處執行的命令的副本,然後在腳本執行時修改該文本文件。如果這在$ PWD中沒有發生,那麼它不是問題。 – Hotei 2010-05-03 17:54:43

+0

回到你的其他問題 - 不,我不打算並行運行,因爲我希望結果是一個按時間順序排列的合併行,然後我可以使用gitg等瀏覽。 – Hotei 2010-05-03 17:56:54

+0

我喜歡你的建議,並在評論中與上面的建議合併。 – Hotei 2010-05-03 18:08:13

1

而沒有被確切地那裏,玉應該簡單:

  • 解壓存檔任何你想要
  • 與混帳爲了工作目錄進行rsync它:
    • 變化相關的文件
    • 將該檔案中的新文件添加到工作目錄中
    • 從工作目錄中刪除沒有鈴聲的文件呃當前存檔
  • git add -A
  • git commit -m "archive n"
  • 重複

想法的一部分是不籤branch_n + 1,但留在同一分支內,提交各焦油含量一個在同一個git倉庫的同一分支之內。
如果你真的總得有兩個並行的過程,然後你可以:

  • git clone第一混帳回購協議
  • git branch -b a_new_branch以確保您隔離在其自己的分支並行處理,你將能夠逼退到第一個回購時完成。
+1

我喜歡這個想法,但是可能會更容易合併前兩款遊戲機。到目前爲止,它看起來像: git的初始化 解壓壓縮包(N)進入新的回購 混帳添加-A git的承諾-m「版本號富」 室射頻*(但不是git的) 重複 – Hotei 2010-05-03 18:05:05

2

我會做在這種情況下什麼,因爲你是在最後的tar包「標記版本」:

  1. 創建空的Git倉庫
  2. 將壓縮包到該目錄覆蓋任何文件
  3. 添加的所有文件git add .
  4. git commit -a -m 'version foo'
  5. git的標籤當前版本
  6. 刪除所有文件從步驟2
  7. 重複每個壓縮包

在你的情況下,它沒有必要創建您的所有壓縮包是不同的,連續的版本分支機構;每個迭代覆蓋前一個。

+1

你缺少一個步驟 - 刪除之前的內容,然後再轉儲到tarball中。 – Cascabel 2010-05-03 17:36:09

+0

確實,將它添加到列表中。否則刪除將不會被處理。 – 2010-05-03 19:36:22

+0

我打電話給他們的版本,但這不完全是他們是。它更像一個'快照號碼'。我通常每個月或每兩個月進行一次實際版本更新。 – Hotei 2010-05-03 21:44:14

8

看看$GIT_SRC_DIR/contrib/fast-import/import-tars.perl

+0

http://git.kernel.org/?p=git​​/git.git;a=blob;hb=HEAD;f=contrib/fast-import/import-tars.perl – 2010-05-03 20:52:44

+0

Stefan, 好的建議! Perl並不是我最喜歡的腳本語言,但它確實證明了一般方法,並指出了一些潛在的問題,如果我在tarball中有符號鏈接。我需要按照特定順序應用更新以獲得期望的結果,但這將是一個很好的基準。進口焦油似乎也依賴於我不熟悉的快速進口 - 但那是另一回事。 謝謝 – Hotei 2010-05-03 21:28:54

+0

@Hotei:import-tars.perl是一個* example *腳本;它服務於(除其他外)來說明如何使用快速導入界面。你可以用你最喜歡的腳本語言編寫自己的腳本(例如,在Python中的contrib/fast-import中有import-zips.py例子)。 – 2010-05-04 08:51:06

相關問題