2010-05-27 5 views
3

Я хотел бы иметь возможность накладывать другие ветви поверх существующей ветви и иметь эти ветви независимо друг от друга. Это было бы полезно, например, разрешить объединение двоичных файлов для разных подпроектов в один и тот же каталог bin. В общем случае данный файл будет присутствовать только в одном слое., создающий ветвь объединения нескольких ветвей git.

В идеале, я бы хотел использовать unionfs для этого, но он должен каким-то образом предоставить доступ к различным каталогам .git, которые будут отображаться во всех подкаталогах одного и того же корня. В любом случае, я думаю, что unionfs на самом деле не работает? Поэтому кажется, что лучше всего поддерживать набор символических ссылок из корня репо в другие репозитории, относящиеся к слоям.

Я рассматриваю делать что-то вроде этого:

  • держать каждый «слой» в отдельном хранилище
  • поддерживать символические ссылки в основной репозиторий для каждого файла, который должен быть слоистым
  • добавить символические ссылки на master .gitignore, чтобы они не удалялись при переключении ветвей.
  • полностью несовместим с Windows, чтобы можно было редактировать файлы в их местоположении в корневом репозитории. IE использует символические ссылки вместо того, чтобы просто копировать файлы в мастер-репо.

Было бы целесообразно отслеживать идентификатор фиксации источника для каждого уровня, чтобы, например, файлы, удаленные из слоя в последующей ревизии, могли удалить свои символические ссылки из исходного репо и быть удалены из основного файл репо .gitignore.

Кажется, что такая система закончила бы работу как git submodule, с ключевым отличием, что подмодули будут совместно вмешиваться в один и тот же корневой уровень репозитория.

Мне интересно, если у вас уже есть утилита для управления этим? Я изучил использование stg (сложный git) для реализации такого рода структуры, но, похоже, это не чашка чая.

+0

Хм, если ветви действительно не имеют каких-либо файлов в общем, слияние тривиально, так что ваш филиал «Союз» может быть построена (осьминога!) Объединение всех ветвей компонентов, да? – Cascabel

+0

Я не хочу их объединять. Я хочу, чтобы они существовали как отдельные компоненты в одной структуре каталогов. В идеале я мог бы сделать что-то вроде 'git group group-of-branch checkout branch-in-the-group', не меняя, какая ветвь была выбрана в других группах ветвей. – intuited

ответ

0

Я хотел бы быть в состоянии слоя других ветвей поверх существующей ветви, и есть те отрасли быть revisioned независимо

Это определенно то, что подмодуля для.

Уловка: вы хотите, чтобы несколько подмодулей объявили все в один общий путь в вашем основном проекте (например, <project>/bin).

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

+0

В некоторых случаях, например, в ситуациях, когда интерпретируемый код редактируется в развернутой системе, это необязательно является опцией. Моя ближайшая цель - иметь возможность редактировать различные модули в моем каталоге .vim без необходимости: a) хранить все в одном репо || b) переключиться на другую среду запуска и прервать мой рабочий процесс, чтобы потратить 10 минут на исправление или добавление функции. Возможно, vim немного атипичен в своей тенденции смешивать компоненты из разных модулей (ака vimscripts) в одном наборе каталогов, но это один из примеров системы, которая работает именно так. – intuited

+0

@intuited: понятный. Интересный случай, но у меня нет немедленного решения. – VonC

3

Если идея состоит в том, чтобы иметь две или более ветки, которые имеют дело с отдельными изменениями, но имеют одну ветвь, которая включает их вместе для тестирования, вы можете захотеть заглянуть в крюк GIT post-commit/post-update, чтобы автоматически объединить различные ветви в смешанную ветвь.

Если это не для тестирования, то я бы хотел подумать о реструктуризации, как все устроено, возможно, вместо этого перебирая вещи в подмодули.

1

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

http://progit.org/book/ch6-7.html

Я я действительно удивился, что больше людей, которые поддерживают подмодули

0

Мне тоже нужно было это сделать. Выезд https://github.com/lesfurets/git-octopus.

Это позволяет использовать глобус на ветвях и выполнять слияние осьминогов (слияние сразу нескольких ветвей). Например .:

git octopus features/*