Здравствуйте, пффф, Вы писали:
П>Да я наверное не очень что-то понимаю. Решил я попробовать с ними пожить. Есть у меня либа, я её в проект присунул как сабмодуль. Либа активно развивается вместе с проектом, я особо не заморачиваюсь с ветками мержреквестами и пр, тупо в мастер добавляю изменения, и пушу в ремоут. Да, при обновлении текущая ветка не меняется, если я уже сделал чекаут, тут я соврал, но в новое место когда клонируешь, надо чекаут на ветку сделать, я пару раз накололся.
Не понял...
П>Состояние не менять — в том плане, что у меня выбрана ветка мастер, и я хочу иметь там самые последние изменения. Ну то есть да, HEAD будет двигаться.
Так не получится, двигать надо вручную. А что если захочешь собрать старую версию, а она тебе вычекнет несовместимый новый сабмодуль?
AD>>Ну ладно, не важно. Сабмодули всегда ставятся на конкретный коммит, как раз чтобы не менять состояния, поэтому они всегда вычекиваются в detached head.
П>Вот тут не очень понятно, а на какой коммит они ставятся? В .gitmodules вроде нет по дефолту информации о коммите, значит, гит сам выбирает какой коммит мне подсунуть? Самый последний?
Нет, который был последним закомичен в этой ветке.
А хранит внутри дерева
https://stackoverflow.com/questions/5033441/where-does-git-store-the-sha1-of-the-commit-for-a-submodule
Представь, что сабмодуль — это софтлинк, который ссылается на конкретное имя
mysuperlib-0.0.3. В разных ветках, в разных коммитах эта ссылка может быть разной. Она автомагически не будет меняться на другие имена.
Чтобы обновить версию сабмодуля в ветке, ты идешь в сабмодуль, вычекиваешь нужную версию (можно и мастер, не важно, азпоминаться бущет именно коммит). Потом идешь обратно в главный реп, делаешь
git add submodule-path,
git commit. Всё, теперь в твоей ветке новая версия. Мержишь свою ветку в мастер главного репа, и оппа, теперь в мастере новая версия.
П>А если я в подмодуле завёл ветки, сделал ветку develop, куда коммичу даже не собирающиеся сорцы, чтобы потом доделать, оттестить, и смержить в мастер? Получится, что сабмодуль будет указывать на нерабочий коммит? Но когда я использую либу, я вообще-то хочу чтобы у меня собиралось с ней. Вот тут как-то не очень понятно
Делаешь ветку в главном репе, делаешь ветку в сабмодуле (можешь их даже одинаково назвать). В ветку главного репа вычекиваешь в сабмодуле свою ветку сабмодуля, делаешь
git add submodule-path,
git commit. Можно пушить и делать автобилд. Другие ветки и мастер это не затронет.