Кто-нибудь, пожалуйста, помогите мне понять подмодули в git. Я знаю, что они много беспокоятся о сети, но, поскольку я предполагаю, что разработчики git умные люди должны иметь причины для текущего поведения - и, возможно, способ обойти мою проблему.
Итак, у меня есть проект и некоторые подмодули. Проект имеет разные ветки, например:
- MyApp_version2
- MyApp_version3
- MyApp_version4
- MyApp_liteversion
- MyApp_development
Мои подмодули не часто обновляются (может быть, раз в неделю), поэтому я не уверен, что они не будут автоматически прикреплены к заголовку репозитория подмодуля.
Однако, когда я проверяю старую ветку - потому что мне нужно исправить ошибку в старой версии программного обеспечения - мне также нужно обновить подмодули.
Зачем мне это нужно?
Я ожидал бы, что git будет работать как svn. Когда я выполняю свою работу в своем основном репо, я бы ожидал, что git что-то подумает об этом: "Хорошо, он хочет выполнить свою работу сейчас. Я вижу, что подмодули в настоящее время находятся в редакции abc, поэтому, когда он в какой-то момент будущее вернется к этому соглашению, он, вероятно, снова захочет подмодули в том же пересмотре."
Я не вижу ни одного случая, когда вы хотите, чтобы подмодули оставались в текущей версии, когда вы возвращаетесь на 3 года в свой основной репозиторий. Однако, должна быть причина для этой реализации, правильно?
Мне бы очень хотелось услышать, знает ли кто-нибудь из вас мысли по этому поводу, но в любом случае мне бы очень понравилось решение. Есть ли способ сказать git: "Я хочу выполнить эту работу с этими подмодулями. Если я в какой-то момент вернусь в это состояние, я хочу, чтобы подмодули также были проверены в правильной версии".
Пример для пояснения
Мой основной репозиторий - это приложение, которое должно использовать SSL, и я нахожу библиотеку SSL (libSSL), которую я добавляю в качестве подмодуля.
31 октября 2010 года я создаю фиксацию в моем основном репозитории (2fd4e1), а подмодуль указывает на libSSL версии 3 (c67a2d).
Время проходит, libSSl обновляется до версии 34, я адаптирую свой код, жизнь это хорошо.
14 мая 2013 года я создаю новый код фиксации (28fced) и подмодуля к самой последней версии libSSL (849ee1).
Однако, если я проверю 2fd4e1, мой подмодуль останется на уровне 849ee1, хотя исходное коммитирование было создано c67a2d. git знает, что я сделал оригинальную фиксацию с c67a2d, и я не вижу, как вам может понадобиться другой подмодуль, чем тот, с которым была создана оригинальная коммита.