2015-01-03 3 views
1

Я следую инструкциям на this answer from "Detach subdirectory into separate Git repository" о том, как использовать команду поддерева git, чтобы разбить подкаталог из репозитория git. Он работал в первом подкаталоге, но мой второй каталог делится на недостающие коммиты.Пытается разделить подкаталог на отдельные git-репо, но как я могу сохранить свои коммиты?

Мой дерево каталогов выглядит следующим образом:

GitBooks
|
------ SQLBasics
|
------ RubyProgramming

Я хочу, чтобы разделить оба эти в свои отдельные репозитории, и я уже сделал это на SQL-Basics. Тем не менее, на RubyProgramming всякий раз, когда я следую тем же инструкциям из приведенного выше ответа, подкаталог распадается и пропускает кучу коммитов. Я уверен, причина в том, что я изменил имя каталога от Ruby Programming до RubyProgramming (обратите внимание на промежуток между ними) в один момент времени, и я предполагаю, что он переносит только коммиты с RubyProgramming (без пробела).

Мой вопрос в том, как переносить ВСЕ из коммитов из этого подкаталога, хотя я изменил его имя в какой-то момент времени. Можно ли сделать это?

Заранее спасибо.

ответ

0

Вы могли бы сделать что-то вроде этого:

git filter-branch -f --prune-empty --tree-filter '[ -d RubyProgramming ] && mv RubyProgramming Ruby\ Programming' -- --all 
git filter-branch -f --prune-empty --subdirectory-filter Ruby\ Programming --all 

Сначала отменить переименование в вашей истории, а затем извлечь один каталог.

+0

Когда inputing первую команду, я получаю вывод: 'Rewrite 63feedc50f75677988c8365c2d65faaebe62cf47 (1/111) MV: переименовать RubyProgramming в Рубиновый Программирование: Нет такого файла или каталога дерево фильтр не удалось: мв RubyProgramming Рубин \ Programming' – Hunter

+0

Пожалуйста * всегда * попытайтесь понять команду, прежде чем вслепую ее запустить. (В противном случае какой-нибудь джокер предложит что-то вроде 'rm -rf /' ...) Это особенно важно с 'git filter-branch', поскольку он может действительно разрушить ваш репозиторий при неправильном использовании. Первая команда берет каждую фиксацию репозитория и пытается переименовать этот каталог. Это, конечно, не удастся, если каталог уже переименован. Я добавил подходящий тест для ответа, но в зависимости от вашего фактического хранилища вы могли бы наткнуться и на другие проблемы. – michas

 Смежные вопросы

  • Нет связанных вопросов^_^