Альтернативи підмодулям Git?


83

Я вважаю, що використання підмодулів Git якось неприємно для мого робочого процесу розробки. Я чув про піддерево Git та Gitslave.

  • Чи існує більше інструментів для декількох проектів сховищ і як вони порівнюються?
  • Чи можуть ці інструменти працювати в Windows?

3
Ви говорите про стратегію злиття піддерева Git або про git-піддерево Евері Пеннаруна ? Ці два принципово не однакові.
kynan

1
Хороше читання тут codingkilledthecat.wordpress.com/2012/04/28/…
nawfal

3
Подивіться мою неофіційну вилку gitslave , сподіваюся, активнішу, ніж оригінал, починаючи з 2.0.2.
Joel Purra

1
Існує також git-subrepo .
хаггі

Відповіді:


101

Що найкраще для вас, залежить від ваших потреб, бажань та робочого процесу. Вони в деяких сенсах напівізоморфні, просто деякі набагато легше використовувати, ніж інші для конкретних завдань.

  • gitslave корисний, коли ви контролюєте та розробляєте підпроекти більш-менш у той же час, що і суперпроект, і, крім того, коли ви, як правило, хочете одночасно мітити , розгалужувати, штовхати, тягнути тощо. gitslave ніколи не тестувався на Windows, про які я знаю. Це вимагає perl.

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

  • git-subtree надає інтерфейс вбудованій стратегії злиття піддерев git. Краще, коли ви віддаєте перевагу мати "уніфіковану" історію git з одним сховищем. На відміну від стратегії злиття піддерев, простіше експортувати зміни до різних дерев (каталогів) назад до початкового проекту, але це не настільки автоматично, як це робиться з gitslave або навіть підмодулем git.

  • repo теоретично схожий на gitslave, але не так добре задокументований для не-андроїдних операцій, які я знайшов. Він досить присвячений моделі розробки Google Android і підтримує лише декілька команд git (хоча ви можете запускати довільні команди), а обмежена рідна підтримка не підтримує, наприклад, централізоване сховище, до якого можна перейти та перевірити галузь здається досить складною.

  • kitenet - х г - н є те , що ви хотіли б використовувати , якщо у вас є кілька систем контролю версій у використанні, але в основному обмежується для GIT тільки суперпроектів завдяки своєму найменшого спільного знаменника підходу. Існують способи запуску довільних команд, але вони не настільки інтегровані.


7
Зауважте, що git-subtree у цій відповіді стосується (як уже згадувалося) стратегії злиття піддерев Git, а не git-піддерева Avery Pennarun , котрі в основі не є однаковими. Останній був чітко розроблений, щоб дозволити внести зміни до піддерева.
kynan

3
Велика поломка! Я хотів би бачити, як він буде змінений, щоб диференціювати "злиття піддерев" від git-subtree, як згадує @kynan.
BrianTheLion

1
@Tobu: Я не вважаю здатність містера запускати довільні команди такою ж, як наявність інтегрованої підтримки команд git. Я припускаю, що тут ви говорите про щось на зразок mr run git config ...або, можливо, (що ще гірше) метод файлу конфігурації для псевдоніма конкретних команд для імен. Звичайно, якщо вам відома якась функціональність містера, яка не була одразу очевидною при прочитанні сторінки довідок, я хотів би про це знати.
Сет Робертсон,

4
@kynan: на додаток до вашого коментаря. Я хотів би зазначити, що git-піддерево Avery's Pennarun тепер доступне у git 1.7.11 і вище.
slatunje

1
@sealTrip: доступний як у git/contrib. Встановити в Ubuntu з sudo make install install-doc prefix=/usr libexecdir=/usr/lib/git-coreдерева джерела Git ( не працює з упакованим Git).
kynan

2

Новим доповненням до списку альтернатив є Git X-Modules . Це має на меті уникнути типових недоліків підмодулів Git, як описано тут . Основна відмінність полягає в тому, що вся синхронізація виконується на стороні сервера, тому для кінцевих користувачів існує лише звичайне сховище Git, яке вони клонують і натискають.


1

В даний час я використовую підмодулі для розробки, а не просто для взаємодії зі сторонніми бібліотеками. Є кілька способів полегшити життя за допомогою підмодулів, особливо коли вони є джерелом конфліктів злиття або перебазування. Подивіться на ls-tree, щоб отримати 2 коміти, що беруть участь у конфлікті в підмодулі. Це, мабуть, найскладніша частина підмодулів для людей. На даний час сценарії значно полегшать роботу з ними. Майбутні версії Git повинні мати кращу підтримку для роботи з ними.

Сподіваюся, це допомагає.


0

Ми зіткнулися з подібною проблемою під час використання підмодулів Git у проектах, де у нас були залежності на різних мовах. Для боротьби з ними ми створили та відкрили інструмент під назвою MDLR ("Модульний"), який дає вам декларативні контрольовані версіями залежності Git із подібною функціональністю до підмодулів Git, але без докучливого робочого процесу. Ви можете встановити його та керувати своїми залежностями за допомогою інструкцій / завантажень у репозиторії GitHub


Ця проблема не виглядає добре: github.com/exlinc/mdlr/issues/16
rjdkolb,

0

У деяких випадках використання мені сподобався кожен з наступних двох простих підходів:

  • Вкладені сховища. Якщо у вашому проекті програмного забезпечення є механізм плагінів, кожен плагін у своєму підкаталозі, може мати сенс git-ігнорувати ці каталоги плагінів і, у вашій локальній файловій системі, зробити кожен із них своїм власним сховищем git. Таким чином, усі ваші файли утворюють одне дерево каталогів, але керуються ними в різних сховищах git. Це не заплутає git.

  • Сховища для кожного пакета. Для програмних проектів, де ви використовуєте якусь систему управління пакетами вихідних кодів (gem / bundler, npm, pear тощо), може мати сенс розмістити ваш повторно використаний код в окремих сховищах git, а потім зробити з них вихідні пакети, а потім встановити їх за допомогою інструменту управління пакетами в батьківський проект. Репозиторій git вашого батьківського проекту міститиме лише посилання на необхідні пакунки та їх версії, тоді як фактичний код цих пакетів буде ігноруватися git, як це робиться з усіма іншими пакетами та зовнішніми бібліотеками. Порівняно із запропонованими вище вкладеними сховищами, це більш складний підхід, оскільки він дозволяє вказати, яку версію пакета слід встановити.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.