Обновление: Я попытался упростить реальный пример здесь, чтобы получить четкое объяснение моих вариантов, но это не сработало. Связанные ниже примеры пока слишком общие, чтобы заставить работать даже этот простой пример.
Я мог делать подобные вещи с SVN все время, и у меня это получилось достаточно хорошо. Теперь мне очень сложно работать с Git, и я начинаю полагать, что моя история в основном слишком искажена, чтобы можно было разобрать ее.
Проблема реального мира: Я около дюжины файлов, которые были перемещены и переименован. Их история смешана с историей сотен других файлов, для которых я хочу полностью удалить историю.
В SVN я мог бы использовать последовательность dump / include-filter / exclude-filter / load, чтобы получить репозиторий урезан, и изредка мне может потребоваться вручную переименовывать пути в самом файле дампа перед загрузкой.
Что-то вроде этого, и я бы сделал:
SET Includes=trunk/src/Foo.aaa trunk/src/Foo.bbb trunk/src/Foo trunk/src/Bar
SET Excludes=trunk/src/Bar/Blah.aaa trunk/src/Foo/Blah.aaa
svnadmin dump FooSrc > Full.dump 2> Dump.log
svndumpfilter include %Includes% --skip-missing-merge-sources --renumber-revs --drop-empty-revs < Full.dump > Filter_1.dump 2> Filter_1.log
svndumpfilter exclude %Excludes% --skip-missing-merge-sources --renumber-revs --drop-empty-revs < Filter_1.dump > Filter_2.dump 2> Filter_2.log
svnadmin create FooDest
svnadmin load FooDest --ignore-uuid < Filter_2.dump > Load.log 2> Load_Errors.log
Есть ли у кого-нибудь хороший пример этого, который представляет собой нечто большее, чем просто тривиальное удаление одного файла или экспорт одного подкаталога?
Самый простой способ определить набор файлов - это список из 7 каталогов пути. Все, что находится внутри этих каталогов, необходимо сохранить, а все, что находится за его пределами, необходимо удалить из истории.
Упрощенная проблема:
У меня есть репозиторий Git, в котором есть несколько файлов, которые я хотел бы извлечь в него собственный репозиторий. Проблема в том, что эти файлы создавались и изменялись на протяжении всей истории исходного репозитория, поэтому мне трудно понять, как их аккуратно извлечь.
Вот суть того, как выглядит моя история (только с большим количеством коммитов и множеством больше игнорировать). Как видите, я явно не Я планирую, что эти файлы позже будут извлечены из истории:
commit 4a09d3f977a8595d9e3f61766a5fd743e4265a56
M src/Foo/Bar/FileToExtract2.foo
A src/Foo/Bar/FileToExtract3.bar
D src/Foo/AnotherFileToIgnore.txt
commit 05d26f23518083270cc45bf037ced29bec45e064
M src/Foo/Blah/IgnoreThisOneToo.foo
M src/Foo/AnotherFileToIgnore.txt
commit 343187228f4bd8e4427395453034c34ebd9a95f3
M src/Foo/Bar/FileToExtract1.txt
M src/Foo/AnotherFileToIgnore.txt
commit 46a0129104ac31291462f657292aab43f8883d8d
A src/Foo/Bar/FileToExtract1.txt
A src/Foo/Bar/FileToExtract2.foo
M src/Foo/FileToIgnore.txt
commit 3fe6af56f0d8dc42fcb5b0bafee41bff534ba2cc
A src/ReadMe.txt
A src/IgnoreMe.foo
A src/Foo/FileToIgnore.txt
A src/Foo/Blah/IgnoreThisOneToo.foo
A src/Foo/AnotherFileToIgnore.txt
В конце концов, я хочу иметь чистый репозиторий с полной историей только файлов в src / Foo / Bar /
. Остальное можно проигнорировать. Я также могу оставить этот репозиторий как есть (т.е. без перезаписи истории) и просто выполнить удаление для всего этого каталога.
В SVN я бы использовал svnadmin dump
, svndumpfilter
и svnadmin load
. Если бы я был осторожен, я мог бы даже вручную отредактировать файл дампа, чтобы очистить пути и т. Д.
Я просматривал команды Git и не могу найти способ сделать это. Любая помощь будет принята с благодарностью.