2012-02-16 95 views
3

我們有一個非常大的古代平CVS回購,其示例格式如下。我已經導入每個subdir作爲自己的git回購與完整的歷史。使用子模塊將'CVS時代'回購轉換爲git回購

. 
├── liba 
├── libb 
├── libc 
├── prog1 
├── prog2 
└── prog3 

讓說,3個方案以如下方式使用庫:

. 
├── prog1 
│   ├── liba 
│   └── libb 
├── prog2 
│   ├── libb 
│   └── libc 
└── prog3 
    ├── liba 
    └── libc 

由於CVS允許標記樹的一部分 - 我們標記每個庫和程序發佈了版本標籤。例如liba_4x23,prog3_2x22

我們還與圖書館的每一個版本,它使用的版本標記的程序(即liba_3x19libc_7x88

如果我們發佈程序的新版本沒有庫標籤 - 標籤停留在程序的最早版本它被使用了。
現在由於道路git的進口作品 - 它實際上是在程序的最新版本結束了(不要擔心,雖然)

Git的子模塊似乎是這是一個非常好的解決方案 - 一個版本可以檢出一個程序,並將所有正確版本的庫作爲子模塊進行抽取。

現在因爲當前所有的程序都在不同版本的庫中 - 我需要在特定版本上改進子模塊。

  • prog1libb_4x50
  • prog2鏈接與libb_4x70

假設libb_4x70鏈接是最新的版本則prog2的例子是容易

git checkout prog2 
cd prog2 
git submodule add libb 
.... done 

那麼如何libb標記添加與版本(不麩皮ched)4x50prog1?如果您有:-)

一個更好的想法是什麼,我們可能還需要做的就是回去3版本的程序,並設置相應的子模塊爲每個版本

其他方面的建議表示讚賞。無論是向後兼容還是管理它如何工作的例子。

回答

4

子模塊(如explained here)的想法是在父回購中記錄特定的提交。

因此,所有你需要做的是,加入libb後,簽出正確的標籤,然後記錄母公司回購內的新狀態:

git checkout prog1 
cd prog1 
git submodule add libb 
cd lib 
git checkout libb_4x50 # make sure to make a branch 
         # if you want to do any modification 
         # based on libb_4x50, 
cd .. 
git add -A . 
git commit -m "fix correct libb version" 

(對於「抽離HEAD」的評論,見「git submodule update * deletes uncommitted files」)

+0

謝謝。 「子模塊的想法是在父回購中記錄具體的提交。」 - 這正是我想要的結果。這比我想象的更簡單。 – 2012-02-16 16:07:51