Как обрабатывать общий код с Git в этом сценарии?

Я сейчас пытаюсь переключить наш контроль версий на Git (с CVSNT). Удивительно, но у меня были проблемы не с распределенностью или концепцией промежуточной области. Но у меня довольно много проблем с осознанием того факта, что операции AFAICT, такие как ветвление, слияние и тегирование, всегда применяются на уровне репозитория, а не на уровне файла или каталога ...

Мы повторно используем наш код в разных проектах. Моя рабочая область в настоящее время выглядит так:

/Dev
  /Libs
    /LibA
    /LibB
    /LibC
  /Project1
  /Project2
  /Project3
  /WebDev

Теперь предположим, что Project1 зависит от LibA и LibB, Project2 зависит от LibB и LibC, а Project3 не имеет зависимостей lib. Некоторые из этих библиотек позже компилируются в библиотеки DLL (или BPL - наша основная среда разработки - это Delphi), другие представляют собой просто наборы повторно используемого кода, который включается по отдельности в основные проекты.

WebDev содержит код для нашего (в основном статического) веб-сайта компании, который также содержит информацию о Project1,2,3 и, следовательно, может быть помечен вместе с ними.

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

Как мне смоделировать это в Git, и есть ли смысл придерживаться этого способа работы? Я читал о подмодулях git, но пока не понимаю, как применить это здесь по нескольким причинам:

  • Насколько я понял, подмодули всегда будут проверяться внутри их соответствующего суперпроекта ". Однако мы обнаружили, что управление несколькими копиями (во время разработки) библиотечного кода с помощью Delphi является королевской PITA, что является одной из причин, по которой мы храним все библиотеки в общем каталоге вне отдельных деревьев проектов. Дополнительные копии всегда проверяются только автоматизацией сборки, а не для выполнения какой-либо реальной работы.

  • Я действительно не хочу, чтобы библиотеки были «независимыми» от проектов: если я помечу или разветвлю один из проектов, я всегда хотите также пометить или разветвить соответствующие библиотеки. Когда я хочу вернуться к определенной помеченной ревизии основного проекта, я хочу, чтобы библиотеки также были возвращены в это состояние. Если возможно, тегирование / ветвление / извлечение всегда должно происходить за один шаг для проекта и его зависимостей.

Я уже предпринял одну попытку поместить все в один репозиторий Git с кодом библиотеки, управляемым в основном в главной ветке, и «проекты», каждый в своей собственной ветке, но всякий раз, когда я пытаюсь объединить изменения библиотеки между ветвями master и проекта, он также извлекает все файлы из несвязанных библиотек, что мне совсем не нужно ...

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

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

6
задан Oliver Giesen 26 January 2011 в 12:56
поделиться