Я пытаюсь переместить один файл (назовем его foo.txt) из одного репозитория в другой (несвязанный) репозиторий, сохраняя его историю. вопрос ebneter показывает, как это сделать для подкаталога. taw question содержит некоторые подсказки и предложения, но не пошаговую процедуру для подражания. jkeating question выглядел многообещающим, но не работал у меня. Поисковые запросы Google оказались пустыми для данного конкретного случая использования. Я ищу для этого четкую последовательность команд.
Последовательность команд, которые я начал выполнять, была следующей:
$ git clone source-repo/ source-repo-copy
$ cd source-repo-copy
$ git filter-branch --tree-filter 'test ! "[email protected]" = "foo.txt" && \
git rm --cached --ignore-unmatch [email protected] || true' --prune-empty
Логика моей команды filter заключается в git rm
всех файлах, которые не являются foo.txt. Я добавил команду || true
в команду, чтобы заставить ее иметь нулевое возвращаемое значение для соответствия ветки фильтра.
Мое намерение состояло в том, чтобы установить source-repo-copy как удаленный для моего целевого репозитория (target-repo), и предположив, что git filter-branch
отфильтровывает все, кроме foo.txt, извлекает и объединяет исходный-репо-копировать в target- Сделки рЕПО. К сожалению, команда git filter-branch
, казалось, не имела никакого эффекта. Он работал без ошибок и, казалось, измельчался через 600+ коммиттов в source-repo, но когда он закончил, git log
и файлы в исходной-репо-копии выглядели одинаково. Должны ли отсутствовать все файлы, кроме foo.txt, и все фиксации, которые не касались его, исчезли из журнала?
В этот момент я не знаю, как действовать. Любые предложения?