Разделение набора файлов в репозитории git в свой репозиторий, сохранение соответствующей истории
Возможный дубликат:
Как разбить репозиторий git при сохранении подкаталогов?
В какой-то момент я добавил свой код в существующий репозиторий git, и с тех пор его довольно много посвятили, в то время как другой разработчик передал другие существующие файлы в репо. Теперь я хочу разделить мой код на свое собственное репо, но сохраните всю историю изменений для моих конкретных файлов.
Прочитав то, что другие сделали для разделения кода, я смотрел filter-branch
и делал --index-filter
или --tree-filter
с помощью команд rm
для файлов, которые мне не нужны. Я не хочу использовать --subdirectory-filter
, поскольку он не подходит для subdir, в котором мой код является topdir (также мы разделили один subdir). Чтобы усложнить ситуацию, некоторые файлы из исходного репозитория со временем переместились со временем, и есть некоторые файлы, которые были созданы и удалены. Это немного упрощает разработку списка rm... сложный процесс.
Я ищу способ фильтровать все/кроме/список файлов/каталогов. Кто-нибудь знает, как это сделать?
Ответы
Ответ 1
Просто, чтобы закрыть цикл, чтобы он отображался как ответ.
Используя index-filter
или tree-filter
, а затем применяя обратную логику, например, git ls-tree
, переданную в (несколько) grep -v
, отправленную в xargs
для git rm
, вы действительно можете удалить все, что не соответствует узкому набор имен файлов/каталогов. Вот команда, которую я использовал для разделения моих файлов:
git filter-branch \
--prune-empty \
--index-filter '
git ls-tree -z -r --name-only --full-tree $GIT_COMMIT \
| grep -z -v "^src/pyfedpkg$" \
| grep -z -v "^src/fedpkg" \
| grep -z -v "^git-changelog" \
| xargs -0 -r git rm --cached -r
' \
-- \
--all