2013-04-03 79 views
0

我想從現有的git倉庫中提取一個目錄到一個新的倉庫。在沒有子目錄的Git篩選器分支中選擇一個目錄

我使用

git filter-branch --tag-name-filter cat --prune-empty --subdirectory-filter modules/plugins -- --all 

this SO answer所見,這很好地工作。

現在我的

modules/ 
    plugins/ 
    foo/ 
    bar/ 
    baz/ 

層次結構和過濾時,我想基本上modules/plugins/*(這是上面的命令的git做什麼),但不modules/plugins/bar

這是可能在這樣一個git filter-branch表達式?如果是這樣,怎麼樣?

通過上述表達我的新回購最終成爲

foo/ 
bar/ 
baz/ 

我怎能代替modules/plugins/一部分?

+1

也許調整此:http://stackoverflow.com/questions/9519863/git-filter-branch-leave-directory-structure? –

+0

+ Max,謝謝。第二部分是蛋糕上的糖霜 –

回答

0

當我發現沒有辦法通過像(虛)--subdirectory-filter modules/plugins,!modules/plugins/bar我使出先運行git filter-branch,然後再把一個表達式:

for B in $BRANCHES; do git checkout -f $B 
    for P in "foo","baz" 
    do 
    git rm -r --cached $P 
    done 
    git commit -m "Plugins removed" 
done 

其中$BRANCHES包含一直是所有分支的列表「被激活「之前通過

for B in $BRANCHES ; do git branch -t $B origin/$B; done