создание объединения из нескольких веток git - PullRequest
3 голосов
/ 27 мая 2010

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

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

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

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

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

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

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

Ответы [ 4 ]

3 голосов
/ 07 июля 2011

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

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

1 голос
/ 19 марта 2012

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

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

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

0 голосов
/ 24 января 2018

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

Позволяет использовать глобус на ветках и выполнять слияние осьминога (слияние нескольких веток одновременно). E.g.:

git octopus features/*
0 голосов
/ 28 мая 2010

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

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

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

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

...