2011-01-12 5 views
1

У меня есть следующий единый репозиторий с этой структурой:мерзавец хирургия - разделив хранилище и изменение структуры каталогов

my-repo/ 
    foo/ 
    contents-of-foo 
    bar/ 
    contents-of-bar 
    baz/ 
    contents-of-baz 
    other-contents 

Я хотел бы получить следующую структуру, в идеале без потери истории/теги:

new-combined-repo/ 
    contents-of-foo 
    bar/ 
    contents-of-bar 
    baz/ 
    contents-of-baz 

и

my-other-repo 
    other-contents 

Я немного застрял на том, как действовать. Я попытался это:

$ pushd path/to/my-repo/ 
$ git mv bar foo/ 
$ git mv baz foo/ 
$ git commit -m "Move bar and baz prior to repository extraction" 
$ cd .. 
$ git clone --no-hardlinks my-repo new-combined-repo 
$ pushd new-combined-repo 
$ git remote rm origin 
$ git filter-branch --tag-name-filter cat --subdirectory-filter foo \ 
     --prune-empty -- --all 
$ git log --follow foo/bar/some-file 

Это упала всю историю за some-file до начала команды git mv.

Лучшие предложения? ТИА.

ответ

1

Почему бы не написать фильтр дерева (для git filter-branch --tree-filter), который удаляет все каталоги, но те, которые вы хотите сохранить? Как этот (непроверенный):

#!/bin/bash 
shopt -s extglob dotglob 
rm -r !(bar|baz|.gitignore) 

Это, конечно, не будет сохранять историю файлов, которые были перемещены в бар или Баз, но помимо этого необычного случая, история будет сохранена в неприкосновенности.

1
git filter-branch --tree-filter 'mv bar baz foo; rm *' 

ли сохранить копию хранилища перед вами беспорядок вокруг этого rm *, пожалуйста.

 Смежные вопросы

  • Нет связанных вопросов^_^