У статті я розповім, як ми працюємо з svn через git і чому не вибрали чистий git.
Subversion - це централізована система контролю версій. Це головний її мінус і головний її плюс :)
Плюс в тому, що централізація дає можливість, наприклад, нумерувати коммітов, тому що їх порядок відомий.
Так само вона мінімізує конфлікти (хоча про це можна і посперечатися), тому що поточний стан сховища одне і воно всім відомо.
У svn можна зберігати кілька проектів в одному репозиторії. Взагалі інтефрейс сховища в svn дуже схожий на файлову систему, що забезпечує мінімальний поріг входження для тих, хто ніколи не працював з системами контролю версій.
Здавалося б - рішення лежить на поверхні, треба просто змінити систему контролю версій. У нашому ж випадку можна просто так взяти і перейти на git.
Причин тому кілька, і всі вони обумовлені спадщиною. Якби ми починали розробку зараз, то скоріше б за все вибрали git. У нас сховища вже близько шести років, за цей час ми створили в ньому 129 проектів, а число ревізій перевалило за 88 000.
Ми використовуємо trac як багтрекер. У ньому зараз більше 10 тис квитків. У багатьох є посилання на коммітов, що підтверджують виправлення. Це багату спадщину втрачати не хочеться.
Так само у svn є плюс - всі проекти лежать в одному репозиторії. Trac думає, що проект у нас один, що сильно полегшує роботу з ним.
Іншими словами, відмова від svn для нас занадто витратний, але Мержі.
Нехай теки сховища буде svn, але всі бажаючі будуть працювати з ним через git. Let's do it!
- Встановлюємо git і git-svn. Метод установки залежить від вашої операційної системи. У моєму випадку зводиться до простого набору команд:
Остання команда займе відчутний час. На нашому репозиторії - години 4.
--stdlayout як би говорить нам, що розташування проекту у нас стандартне:
Транк тепер називається master, всі інші бранчі іменовані як зазвичай.
Робота з Бранч:
І як тепер з цим працювати?
Для Мержа в master (trunk)
Мержи проходять швидко, тому що не вимагають наявність віддаленого сховища. Їх більше ніхто не боїться.Наостанок невеликий FAQ:
- Зробити бранч і переключиться в нього: git svn branch ticket-666 git svn fetch git co -b ticket-666 ticket-666
- Перенести бранч в майстер: git co ticket-666 git merge --log --no-ff master git svn dcommit git co master git merge --log --no-ff ticket-666 git svn dcommit
- Здати бранч в тест (оновити з майстра і закомітіть): git co ticket-666 git merge --log --no-ff master git svn dcommit
Оновлювати періодично репозиторій: git svn fetch