Как переместить файл из одного репозитория git в другой с сохранением истории

Я пытаюсь переместить один файл (назовем его foo.txt) из одного репозитория в другой (несвязанный) репозиторий, сохранив его историю. Вопрос ebneterпоказывает, как это сделать для подкаталога. В вопросе Тауесть некоторые намеки и предложения, но нет пошаговой процедуры, которой нужно следовать. вопрос Джейкитингавыглядел многообещающе, но не сработал для меня. Поиски Google оказались пустыми для этого конкретного варианта использования. Я ищу четкую последовательность команд для этого.

Последовательность команд, которой я начал следовать, была следующей:

$ git clone source-repo/ source-repo-copy
$ cd source-repo-copy
$ git filter-branch --tree-filter 'test ! "$@" = "foo.txt" && \
  git rm --cached --ignore-unmatch $@ || true' --prune-empty

Логика моей команды filter заключается в git rmвсех файлах, которые не являются foo.txt. Я добавил || trueдля команды, чтобы заставить ее иметь нулевое возвращаемое значение, чтобы удовлетворить ветвь фильтра.

Я намеревался установить source-repo-copy в качестве удаленного для моего целевого репозитория (target-repo), и предполагая, что git filter-branchотфильтровывает все, кроме foo.txt, fetch и источника слияния. -repo-копировать в target-repo. К сожалению, команда git filter-branchне дала результата. Он работал без ошибок и, по-видимому, выполнил более 600 коммитов в исходном репо, но когда он завершился, git logи файлы в исходном репо-копии выглядели одинаково. Должны быть не все файлы, а foo.txt отсутствует, и все коммиты, которые его не касались, исчезли из журнала?

На данный момент я не знаю, как поступить. Любые предложения?

44
задан Community 23 May 2017 в 12:02
поделиться