2011-04-07 63 views
10

是否有移動存儲庫,及其所有標籤,是另一個倉庫的自動化方式子目錄的方法嗎?如何在過濾存儲庫時保留標籤?

對於原因,一個項目被分成多個存儲庫。現在我們看到這不是一個熱門的想法,並希望再次將它重新整合在一起。考慮子模塊,但它們確實是一個項目,我們需要在它們之間移動大量文件。

比方說,我們有倉庫A,B和C,我們要一個項目,它們中的每一個子目錄:

project/ 
    A/ 
    B/ 
    C/ 

可以與git-filter-branch --tree-filter來完成。完成,沒問題。它甚至也正確地分行,這是一個驚喜。

問題是,A,B和C都有標籤,他們都需要轉換。

這能自動化?

回答

13

我想我可以回答我的問題。將--tag-name-filter cat添加到git-filter-branch呼叫。 -- --all立即執行所有分支和標籤,大大加快了轉換速度。這是完整的電話。

git filter-branch --tree-filter 'move-to-subdir $subdir' --prune-empty --tag-name-filter cat -- --all 

移動到subdir是我編寫的一個小程序,用於創建子目錄並將文件移動到其中。

#!/usr/bin/env perl 

use Path::Class; 
use autodie; 

my $subdir = shift; 

mkdir $subdir unless -d $subdir; 

my $cwd = dir("."); 
my @kids = grep { $_ ne $subdir } $cwd->children; 
for my $dir (@kids) { 
    rename $dir, dir("$subdir/$dir")->cleanup; 
} 

此信息全部在git-filter-branch手冊頁中,但它有點模糊。

相關問題