Мое требование: Разбить один репозиторий git на несколько репозиториев git, сохраняя ту же структуру каталогов, что и в исходном репо, и сохранить историю фиксации для файлы, которые копируются в новое репо. То, что я уже пробовал:Скопируйте несколько файлов и каналов из одного git-репо в другой, сохраняя при этом свою первоначальную историю.
Сначала я попытался мерзавец фильтр-ветви --subdirectory фильтр на основе предложений в http://gbayer.com/development/moving-files-from-one-git-repository-to-another-preserving-history/ Результат: История сохраняется, но можно увидеть только на управлении git log --follow Кроме того, оригинальная история фиксации не может быть видна на Github. Он просто отображает мою фиксацию слияния как единственную фиксацию для этого файла и не отображает никаких предыдущих коммитов. Я все еще могу жить с этим ограничением и принимать его в качестве решения. Но другое беспокойство, которое я испытываю при таком подходе, заключается в том, что для каждой папки и каждого файла, который я хочу скопировать, мне нужно клонировать исходное репо несколько раз, а также повторять все эти 12 или 13 шагов каждый раз. Я хотел бы знать, есть ли более простой способ сделать это, так как я перемещаю много файлов. Кроме того, поскольку должность 5 лет, просто интересно, доступны ли более простые решения? (Удивительно Google в основном показывает этот блог в качестве первого результата поиска)
Следующая вещь, которую я попробовал, был комментарий на ранее пост Greg Байера http://gbayer.com/development/moving-files-from-one-git-repository-to-another-preserving-history/#comment-2685894846 Это решение сделало вещи немного проще, используя GIT поддерево разделить но результаты были такими же, как указано в первом случае.
Затем я попробовал журнал мерзавец --patch-с-стат и мерзавца я вариант, основанный на этот ответ https://stackoverflow.com/a/11426261/5497551 Результат: Это обычно дает ошибки при встрече слияния, при применении патча. Я пробовал одно из предложений по этому вопросу: -m --first-parent Это разрешило ошибки, но не расширяет никаких слияний с их коммитами, просто перечисляет слияние как единое целое. Следовательно, большая часть истории фиксации теряется. Итак, я добавил еще одну опцию - 3way. Это продолжалось снова и снова через коммиты и не приводило к приемлемому решению.
В заключение, я предпочел бы использовать 3-го решения, если только там была возможность иметь все коммиты в слиянии должны быть перечислены в истории нового репо. Иначе я должен придерживаться первого решения, которое немного неудобно и утомительно в моей ситуации. Любые советы, помощь будут очень признательны.
Спасибо.
', а также сохранить фиксации истории для всех files' - так просто удалить биты вы не хотите сохранить? Вы можете найти это полезным: [Новое репо с копией истории только отслеживаемых файлов] (http://stackoverflow.com/a/17909526/761202). – AD7six
Спасибо. Когда вы говорите «удаляйте все и просто восстанавливайте файлы, которые хотите сохранить»: можете ли вы помочь мне понять, на каком этапе мы восстанавливаем файлы, которые я хочу сохранить? Потому что keep-these.txt будет иметь список всех файлов, присутствующих в текущем репо? Или я должен сначала удалить ненужные файлы, а затем сделать git ls-files> keep-these.txt'? Я довольно новичок в git, поэтому не очень хорошо разбираюсь во всех его концепциях. – neel
Пожалуйста, отредактируйте свой вопрос, чтобы быть понятным. непонятно из описания вопроса, почему 'git rm somefolder; git commit -m «удаление некоторой папки» 'не делает того, что вы хотите - вы специально просите сохранить историю фиксации для _all_ файлов; также быть конкретным с тем, что у вас есть, и тем, что вы ожидаете в результате; поместите папки/файлы верхнего уровня в вопрос - и чего вы хотите достичь. – AD7six