Я пытаюсь переместить один файл (назовем его foo.txt) из одного репозитория в другой (несвязанный) репозиторий, сохраняя его историю. ebneter's question показывает, как это сделать для подкаталога. taw's question содержит несколько советов и предложений, но не пошаговую процедуру для подражания. jkeating's question выглядел многообещающим, но не работал для меня. Поисковые запросы Google оказались пустыми для данного конкретного случая использования. То, что я ищу, - это четкая последовательность команд для этого.Как перенести файл из одного хранилища git в другой при сохранении истории
Последовательность команд я начал следить была такова:
$ 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
Логика моей команды фильтра является git rm
все файлы, которые не foo.txt. Я добавил команду || true
в команду, чтобы заставить ее иметь нулевое возвращаемое значение, чтобы удовлетворить ветви фильтра.
Мое намерение состояло в том, чтобы установить source-repo-copy в качестве удаленного для моего целевого репозитория (target-repo), и при условии, что git filter-branch
отфильтровывает все, кроме foo.txt, извлекает и объединяет source-repo-copy в target-repo , К сожалению, команда git filter-branch
, казалось, не имела никакого эффекта. Он работал без ошибок и, казалось, измельчался через 600+ коммитов в source-repo, но когда он закончил, git log
и файлы в копии source-repo выглядели одинаково. Должны ли отсутствовать все файлы, кроме foo.txt, и все фиксации, которые не трогали его, исчезли из журнала?
На данный момент я не знаю, как действовать. Какие-либо предложения?
Возможный дубликат [Как перемещать файлы из одного git-репо в другой (не клон), сохраняя историю] (http://stackoverflow.com/questions/1365541/how-to-move-files-from-one -git-repo-to-another-not-a-clone-preserve-history) – tripleee