Создать репозиторий git из коммитов предыдущего - PullRequest
2 голосов
/ 21 января 2011

Я был частью проекта, который включал создание плагина Redmine с множеством функций.

Теперь я хочу взять некоторые функции и превратить их в отдельные плагины.Для этого я создам один отдельный репозиторий git для каждого.

В этом репозитории git я хотел бы иметь неповрежденную историю из исходного репозитория git, содержащую только файлы, относящиеся к этой функции.

Должен ли я иметь более старый репозиторий в качестве удаленного и проходить каждый коммит вручную, находя те, которые меня интересуют, и фиксируя их в новом репозитории?

Или есть другой (более практичный) способ сделать это?

Рабочий процесс в старом git-репозитории:

  • Была только основная ветвь;

  • Каждый раз, когда вехабыло завершено, было совершено и отправлено на удаленный;

Ответы [ 2 ]

7 голосов
/ 21 января 2011

Посмотрите на git-filter-branch (1) , который представляет собой швейцарский армейский нож Git для автоматического переписывания истории, и он, безусловно, позволяет всем коммитам касаться определенного набора файлов (и удалятьеще).

Как это использовать подробно, зависит от вашего реального хранилища.Если, например, все файлы, которые вы хотите сохранить, уже аккуратно содержатся в подкаталоге (скажем, foobar), то будет достаточно следующего:

git filter-branch --subdirectory-filter foobar --prune-empty -- --all

В качестве альтернативы вы можете использоватьЧтобы удалить все файлы, кроме тех, которые вы хотите сохранить из своего хранилища, выполните следующие действия:

git filter-branch --tree-filter 'rm -f filename1 pattern2.*' --prune-empty -- --all
4 голосов
/ 21 января 2011

Вместо того, чтобы переписывать историю, чтобы извлечь только те файлы, которые вам интересны, вы можете сохранить исходную историю - которая обеспечивает контекст для всех изменений - и добавить новый коммит, который просто удаляет все файлы, которые вы aren't заинтересован.

Клонируйте исходный репозиторий, затем создайте ветку для каждого плагина и в каждой ветке удалите все, что не имеет отношения к этому плагину.Таким образом, все ваши плагины имеют историю, которая восходит к их общему происхождению.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...