У меня есть git
репозиторий, который, по сути, содержит два связанных проекта, которые я хотел бы сейчас разделить. Я хотел бы переместить файлы, связанные с одним проектом, в новый репозиторий, сохранив историю изменений. Чтобы быть конкретным, предположим, что исходный репозиторий git содержит:
file1.c
file2.c
subdir/file2_extra.c
Кроме того, оригинальный git
репозиторий содержит несколько веток. Я хочу оставить только некоторые из них, связанные с файлами, которые я хочу разделить.
Как мне создать новый git
репозиторий, содержащий, скажем, только file2.c
и subdir/file2_extra.c
вместе с историей коммитов к ним?
Обратите внимание, что файлы, которые я хочу разделить, не найдены в отдельном каталоге. В противном случае, я думаю, можно использовать git subtree
.
Я пытался использовать git filter-branch
, но безуспешно. Давайте предположим, что исходный репозиторий git_original
, то, что я пробовал -
$ git clone git_original/ git_new
Cloning into 'git_new'...
done.
$ cd git_new
$ git rm file1.c
rm 'file1.c'
$ git filter-branch --prune-empty -- --all
Cannot rewrite branches: Your index contains uncommitted changes.
Но если я фиксирую удаление file1.c
, то git filter-branch
ничего не делает.