LINUX.ORG.RU

git и подпроекты


0

0

Есть необходимость собрать проект из частей (подпроектов), каждай часть, можно сказать, независимая разработка и используется в нескольких проектах. Нужно собрать всё в один проект и отладить. Тестирую git. Нашел два способа: submodules и subtree. Субмодули в принципе устраивают, только с ними сложновато когда много подпроектов. subtree вроде больше понравилось. Возник вопрос, если кто пользовался, расскажите как там можно изменения в подпроекте отправить в родительский репозит. Или может быть еще какие способы есть.


оказывается это не возможно, абыдно ...

xeb
() автор топика

А, дурацкий вопрос, один и тот же файл в git может принадлежать разным (под)проектам? Т.е. чтобы несколько разных проектов могли использовать частично общие, частично различающиеся файлы?

KRoN73 ★★★★★
()

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

Получается 2 разных проблемы:
1.
вытягиваение синхронно всех HEAD всех проектов - это смахивает на просто каталоги.
/rep
 -,
   /libproj1
   /libproj2
   /util1

В svn это можно сделать через svn:externals. Причем пути к репозиторию могут быть как локальными(вроде появились в недавних версии) так и абсолютными (с именем хоста, где он лежит).

В git-submodule это наверное можно было бы сделать, если вместо sha1 состояния модуля написать символьное имя (мне показалось, что это сделать нельзя). Пути к репозитариям только абсолютные. Вытягивать подмодули нужно явно после вытягивания проекта. Почти не пользовался, но показалось не очень удобным.

В darcs это обычно делается вытягиванием из разных репозиториев (через свой скрипт).

2.
попытка повесить таг/сделать ветку на всё это мясо с подмодулями.

В svn нужно писать свои скрипты, которые вешают таги на подмодули и перебивать в тегированном проекте(вложенных подпроектах) ссылки на externals.

В git-submodules это делается автоматически (tag).

Мне кажется, что модули - это некий идиотский концепт, которым лучше не пользоваться. Слишком много геморроя возникает при переезде с 1 системы контроля версий на другую. Проще держать проекты самодостаточными насколько это возможно, вводить версии библиопек и контроллировать их при сборке/исполнении продукта.

anonymous
()
Ответ на: комментарий от anonymous

Я тоже занимался этой проблемой. Максимум до чего дошёл -- hgforest (расширение для Mercurial). Но это немного не то. В итоге пока использую Subversion. Если найдёте решение, то сообщите сюда -- rush.william@gmail.com (устраивает решение для любой Distributed VCS: Darcs, Mercurial, git, etc)

Sectoid ★★★★★
()
Ответ на: комментарий от Sectoid

А как subversion-то спасает? Там конечно можно скопировать кусок дерева файлов, но дальше он уже будет самостоятельным. Или я чего-то не понимаю?

Teak ★★★★★
()
Ответ на: комментарий от Teak

>А как subversion-то спасает? Там конечно можно скопировать кусок дерева файлов, но дальше он уже будет самостоятельным. Или я чего-то не понимаю?

Там это делается через svn:externals. Атрибут такой.

Sectoid ★★★★★
()
Ответ на: комментарий от Sectoid

>> А как subversion-то спасает? Там конечно можно скопировать кусок дерева файлов, но дальше он уже будет самостоятельным. Или я чего-то не понимаю?

> Там это делается через svn:externals

И чем это лучше forest? IMNSHO, svn:externals - тупейший до бесполезности и легко эмулируемый механизм.

tailgunner ★★★★★
()
Ответ на: комментарий от Sectoid

Спасибо, не знал. Почему-то я как-то мимо этого момента проскочил...

Teak ★★★★★
()
Ответ на: комментарий от tailgunner

Бегло полистал hgbook, который вы мне как-то порекомендовали. Возник вопрос: Могут ли быть в одном репозитарии mercurial сразу несколько веток? (и желательно их все сразу вытягивать, как в git, svn)

anonymous
()
Ответ на: комментарий от anonymous

> Могут ли быть в одном репозитарии mercurial сразу несколько веток?

Да, конечно.

> желательно их все сразу вытягивать, как в git, svn

Этого не понял. "Вытягивать" - это pull? По умолчанию hg pull забирает из репозитория-источника всё, чего нет в целевом репозитории.

tailgunner ★★★★★
()
Ответ на: комментарий от Sectoid

>> svn:externals - тупейший до бесполезности

> Аргументы?

Насколько я помню, он ничего не умеет, кроме как вытаскивать указанные в проперти репозитории?

>>и легко эмулируемый механизм.

>Пример?

В Mercurial есть хуки для pre-имякоманды. Можно повесить то же самое на ./configure. Можно сделать кучу разного всего, и это даже нетрудно.

Да, и что не так с hgforest? Я вот думаю его заюзать :)

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

>Насколько я помню, он ничего не умеет, кроме как вытаскивать указанные в проперти репозитории?

Ну, немного расширенней -- можно указать вытягивать определённую ревизию.

>В Mercurial есть хуки для pre-имякоманды.

И как сделать ... *осёкся* Я -- тормоз. Ведь Mercurial на Python! Т.е. уже гарантируется, что он (Python) будет на конечной машине. Спасибо.

/me пошёл пилить хуки

Sectoid ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.