При работе над свободными проектами, не редко возникают ситуации предполагающие создания и сопровождения своего ответвления от основного репозитория. Каждое ответвление влечёт за собой изобретение механизма корректной и быстрой синхронизации с основным (upstream) репозиторием. Средствами git можно производить командой:

git merge


При активной работе над проектом может возникать большое количество конфликтов, с которым git справиться не в силах и приходится разрешать их вручную. Помимо всего прочего «свои» коммиты теряются среди огромного числа upstream-коммитов, на картинке это выглядит примерно так:

image

Для удобства работы с такими репозиториями можно воспользоваться средством GitUm призванного облегчить жизнь разработчиков.

Итак, GitUm — средство для поддержки работы над ответвлением проекта в git-репозитории, представляет собой набор скриптов, написанных на языке python, формирующих «особый» git-репозиторий состоящий из 5 локальных веток:
  • Ветка rebased с патчами наверху — рабочая ветка, создаётся локально.
  • Ветка current с непрерывной историей изменений.
  • Ветка patches с патчами в виде отдельных файлов — каждый коммит это состояние репозитория.
  • Ветка upstream — копия апстрим-ветки.
  • Ветка gitum-config с конфигурационным файлом, где содержатся имена 4-х предыдущих веток. Носит всегда название gitum-config. Может отсутствовать — тогда используются имена веток по умолчанию.


В качестве примера возьмем активно развивающийся репозиторий WINE и инициализируем GitUm-репозиторий на его основе:

git clone git://source.winehq.org/git/wine.git
cd wine
gitum create --upstream master

получаем 4 ветки в репозитории, основной является rebased, в которой мы и работаем
image
вносим изменения и применяем
gitum update

получается такая картина
image
теперь можно произвести синхронизацию с upstream-репозиторием
gitum merge

в результате мы сможем увидеть все свои изменения и полную историю во времени
image
Чтобы узнать текущее состояния веток и репозитория с которым работаем, как в git status:
gitum status
Have new commits, run gitum update to save them:
	Test


В результате получается интересный и удобный инструмент для работы с git-репозиториями, который экономит уйму времени.

Страничка проекта GitUm
Исходный код http://git.etersoft.com/projects/leaders/gitum.git