Розробка

Контроль версій окремих файлів з використанням GitHub Gist

Часто буває так, що у розробника з-часом накопичується деяка колекція коду який він використовує в своїх проектах.

Одні скрипти він використовує в одних проектах, інші в інших.

Ці скрипти з-часом удосконалюються, прибираються баги, оптимізуються. Тому постає питання, як синхронізувати нові версії скриптів з тими, які в проектах.

Тут є кілька варіантів:

Перший варіант:

Створити один репозиторій і помістити туди всі скрипти. Потім цей репозиторій підключається як підмодуль до проекту і використовується.

Мінуси:

  1. у проект копіюються всі скрипти включаючи непотрібні.
  2. підмодуль не commit-ится в репозиторій проекту, тому якщо буде недоступний віддалений репозиторій подмодуля, то ми не зможе викачати проект цілком.

Другий варіант:

Кожен скрипт окремо зберігати на Github gist і підключати потрібні як підмодулі
Мінус той-же, що і в першому варіанті у другому пункті.

Третій варіант:

Використовувати Git Subtree.

(Дане рішення є альтернативою для Git submodules)

Git subtree — ще один з методів злиття гілок. Його ідея полягає в тому, що маючи дві гілки, git буде розуміти, що одна гілка — це не різновид інший, а доповнення.

Загальна суть ідеї:

  1. — додаємо файл на Github gist (генерується міні-репозиторій)
  2. — прив’язуємо міні-репозиторій до нашого проекту у вигляді окремої гілки
  3. — призначаємо папку для цієї гілки
  4. — викачуємо.
  5. — далі працюємо як з звичайної гілкою (merge, commit, fetch…)

Тепер подробиці з використанням Git-extensions.

1) Публікуємо наш файл з кодом на https://gist.github.com де відразу можемо отримати посилання на «міні»-репозиторій:

Відкриваємо репозиторій нашого проекту в GitExtensions і вибираємо:

[Repository] -> [Remote repositories…]

Підключаємо як окрему гілку.

Для цього натискаємо [+]. Вводимо [Name], [Url] і зберігаємо [Save changes]:

$git remote add "Util1" "https://gist.github.com/cf056e792d3bd9c2fc5973b846efe3d3.git"

Бачимо, що підключилися до віддаленого сховища.

Далі нам потрібно зв’язати цю гілку з певною папкою в нашому проекті, щоб файл копіювався туди.

Для цього відкриваємо Git-bash(ctrl+G) і виконуємо команду:

$git read-tree --prefix=Client/Assets/ -u Util1/master

де:

Client/Assets/ — шлях до папки, в яку буде копіюватися файл
Util1/master — ім’я гілки віддаленого сховища
(через UI не знайшов способу)

Gist-гілка стає прив’язана до нашої папці у проекті. І файл вже там.

Тепер можемо працювати як зі звичайною гілкою.

Наприклад, якщо в Gist файл змінюється, ми може отримати нову версію:

Робимо Fetch All і бачимо всі зміни:

$git fetch --progress "--all"

Потім робимо злиття, щоб залити зміни в нашу гілку:

$git merge --no-ff --allow-unrelated-histories Util1/master

Результат:

Додаткова інформація:

https://git-scm.com/book/ru/v1/Инструменты-Git-Слияение-поддеревьев

Git subtree: the alternative to Git submodule


https://www.nwcadence.com/blog/git-subtrees

Related Articles

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *

Close