Разделение Git-репозитория на основе произвольных путей к файлам - PullRequest
2 голосов
/ 20 сентября 2011

У меня есть один репозиторий git, который я хотел бы превратить в два репозитория git, однако разделение не так просто, как кажется git filter-branch --subdirectory-filter.

myRepo/
    a-main.js
    b-main.js
    a-other.js
    tests/
        a-tests.js
        b-tests.js

Я хотел бы получить еще один репозиторий, в котором есть только файлы a-*. Обратите внимание, что я только что назвал их так для ясности, у реальных файлов нет общего шаблона. Их всего несколько, поэтому нет проблем перечислить их по отдельности.

Что я пробовал:

git clone --no-hardlinks ~/myRepo ~/myRepoA
cd ~/myRepoA
git filter-branch --tree-filter "rm b-main.js tests/b-tests.js" \
                  --prune-empty HEAD

Но это дает этот вывод

Rewrite 4ce7... (1/46)rm: cannot remove `b-main.js': No such file or directory
rm: cannot remove `tests/b-tests.js': No such file or directory
tree filter failed: rm b-main.js tests/b-tests.js

Для бонусных баллов:

Как только это будет сделано, как мне отправить его в новый репозиторий на Github?

1 Ответ

2 голосов
/ 20 сентября 2011

Оказывается, мне не хватало флага -f:

$ git filter-branch --tree-filter "rm -f b-main.js tests/b-tests.js" \
                  --prune-empty HEAD

И для моих собственных бонусных очков:

$ git remote rm origin
$ git remote add origin git@github.com:username/reponame.git
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...