How to як і навіщо працювати з svn через git

У статті я розповім, як ми працюємо з 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. Метод установки залежить від вашої операційної системи. У моєму випадку зводиться до простого набору команд:
  • Створюємо приємний до використання
  • Клонуємо svn репозиторій:

    Остання команда займе відчутний час. На нашому репозиторії - години 4.
    --stdlayout як би говорить нам, що розташування проекту у нас стандартне:

    Транк тепер називається master, всі інші бранчі іменовані як зазвичай.
    Робота з Бранч:

    І як тепер з цим працювати?

  • Merge. Заради цього ми й робили все це.

    Для Мержа в master (trunk)

    Мержи проходять швидко, тому що не вимагають наявність віддаленого сховища. Їх більше ніхто не боїться.
  • Основи роботи з git

    Наостанок невеликий 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

    замість висновку

    Схожі статті