git

Подписаться на эту метку по RSS

Есть такая распространенная задача в Git — выделение некоторой (суб)директории в отдельный проект, т.е. в новый репозиторий.

При этом вы можете оставить папку в старом проекте, добавить её в .gitignore и работать с ней как с отдельным репозиторием (альтернатива git submodules), либо полностью удалить её из старого проекта.

В последних версиях Git это тривиальные задачи. Я опишу первый вариант.

 

1. Заходим в директорию, находящуюся под версионным контролем и выполняем команду:

git subtree split -P <path-to-folder> -b <name-of-new-branch>

Этим мы отделяем нужную директорию со всей историей её изменений в новую ветку <name-of-new-branch> . Обратите внимание, что <path-to-folder> не должен начинаться или оканчиваться какими-либо специальными символами вроде «/» или «.».

К примеру если наш репозиторий лежит в «D:\projects\my-project» и мы желаем отделить папку «D:\projects\my-project\modules\my-module», то пишем так:

cd D://projects/my-project
git subtree split -P modules/my-module -b my-module-branch

Новая ветка будет «висеть» отдельно, взгляните на пример реального проекта:

 

 

2. Создадим новый репозиторий

читать дальше »

Коммиты в Git можно объединять в один несколькими способами (git rebase -i , git merge --squash ) и они неплохо работают, если вам нужно объединить ревизии где-то из середины ветки.

Если всё, что требуется, это объединенить последние N коммитов, есть другой, изящный способ. Например для последних 3-х коммитов:

git reset --soft HEAD~3
git commit

Пишите новый текст коммита и всё!