Несколько репозиториев в одном каталоге - PullRequest
7 голосов
/ 30 декабря 2011

Это вопрос, который, кажется, возникает нечасто, но, к сожалению, я не нашел ответа, который мог бы в полной мере применить к моей ситуации, поэтому решил, что задам свой вопрос. Это мой первый вопрос о ТАК, так что будьте добры. : P

«Проблема»: Наша компания разрабатывает несколько приложений PHP, однако одно из них является своего рода «мастером». Все остальные наши приложения установлены внутри этого «главного приложения», и для работы требуется главное приложение.

Мы, конечно, используем управление версиями для управления этими приложениями.

Хотя многие файлы в наших аддон-приложениях находятся в подкаталогах, не все из них. Это означает, что мы не можем использовать импорт подкаталогов (внешние svn, подмодули git и т. Д.). Например, в корневой папке есть несколько папок (admin, public, kernel и т. Д.), А в приложениях addon есть файлы в одной или нескольких из этих папок - они не являются независимыми в структуре каталогов главного приложения. .

В настоящее время мы используем SVN и недавно обнаружили, что рассматриваем git из-за некоторых доступных функций, которые, по нашему мнению, могут быть нам полезны. Однако с git мне не совсем понятно, есть ли действительно способ «слить» (не в смысле контроля версий) эти репозитории локально в один каталог, когда разработчики работают над кодом. Я также не нашел способ сделать это с SVN.

В идеальном мире у нас был бы один репозиторий для нашего «основного» приложения со структурой, подобной следующей:

  • /
  • - file1
  • - file2
  • - / админ
  • ---- file1
  • ---- file2
  • - / * общественный 1028 *
  • ---- file1

Наше аддонное приложение будет иметь такую ​​структуру (помните, у нас есть несколько аддонных приложений):

  • /
  • - FileX
  • - / админ
  • ---- / MyApp
  • ------ file1
  • ------ file2
  • - / общественный

Мы экспериментировали со следующими подходами, каждый со своими оговорками:

  1. Все приложения в одном репозитории. Это менее чем идеально, так как становится эффективным кошмаром для управления версиями для каждого приложения (особенно в SVN). Ветвление и тегирование берут файлы из несвязанных и отдельных приложений.
  2. Все приложения в отдельном репозитории. Это также не идеально (ну, это с точки зрения управления / организации), потому что вы не можете экспортировать два отдельных репозитория в одну папку, поэтому вы всегда работаете с извлечением одного репозитория и экспортом других. Если вы работаете с приложением X и в нашем главном приложении произошли изменения, вам нужно вручную выполнить новый экспорт этого главного приложения и скопировать файлы в репозиторий приложения X, над которым вы работаете, чтобы получить последний код платформы.

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

Похожие вопросы: Несколько репозиториев в одном каталоге (одного уровня) - возможно ли это? - это очень близко к тому, что я спрашиваю, я думаю, но я не видел ни одного решения, которое, по моему мнению, могло бы быть применено к нашей ситуации.

Ответы [ 3 ]

3 голосов
/ 30 декабря 2011

git позволяет вам указать рабочий каталог и git-каталог в команде верхнего уровня git:

git status

можно изменить для использования другой папки .git с

git --git-dir=some/other/path/to/a/different/.git/folder status

Аналогично, вы можете указать другую рабочую папку:

git --work-tree=some/other/path status

Вы также можете объединить 2.

Если вам нужен этот рабочий процесс все время, вы можете переопределить и обернуть команду git, чтобы всегда указывать на определенный .git dir или work dir. Примером являются «достижения git», которые перехватывают команды git и дают вам вознаграждение за улучшение работы с git, а затем вызывают фактическую команду git: https://github.com/icefox/git-achievements

Выглядит как забавная задача, которую нужно решить.

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

3 голосов
/ 30 декабря 2011

Я никогда не пытался сделать что-то подобное в производственной среде, но вы наверняка могли бы сделать:

$ git init
$ mv .git .git1
$ git init
$ mv .git .git2
$ export GIT_DIR=.git1
# do work in first repo
$ export GIT_DIR=.git2
# do work in second repo
2 голосов
/ 31 декабря 2011

Subversion 1.6 и 1.7 допускают внешние эффекты одного файла.

См. http://svnbook.red -bean.com / ru / 1.7 / svn.advanced.externals.html

"Subversion 1.6 также представила поддержку внешних определений для файлы. Внешние файлы настроены так же, как внешние каталоги и отображаются в виде версионного файла в рабочей копии.

Например, допустим, у вас есть файл /trunk/bikeshed/blue.html в ваш репозиторий, и вы хотели этот файл, как он появился в ревизии 40, появится в вашей рабочей копии / trunk / www / как green.html. "

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...