Подтвердить что ты не робот

Можно ли сделать обновление <sub> 20> для получения тегов в подмодулях?

У меня есть репозиторий git, который использует подмодуль, который я хотел бы указать на аннотированный тег, но когда я делаю git submodule update, новые теги не получаются. Я могу получить новые теги в подмодуле с помощью cd-ing в подмодуль и сделать там git fetch --tags, но мне бы очень хотелось сделать все это извне, когда оно было написано.

Я не могу найти что-либо в документации git, предлагающей способ включить теги git submodule update (моя версия git - 1.7.3.5).

Очевидно, есть еще одна возможность - указать субмодуль на фиксацию, на которую указывает тэг, а не на сам тег, но это не выглядит так аккуратно.

Есть ли способ получить git submodule update для включения тегов?

4b9b3361

Ответ 1

git submodule реализуется как оболочка script, поэтому легко увидеть, что он делает - он может быть в /usr/lib/git-core/git-submodule, если вы используете упакованную версию. По сути, он просто запускает git-fetch в подмодуле, если имя объекта (SHA1sum), хранящееся в основном дереве проекта, не соответствует версии, проверенной в подмодуле, поскольку указывает Корактор.

Документация для git fetch (или man git-fetch в то время как kernel.org не работает) говорит, что она должна извлекать каждый тег, который указывает к загруженному объекту, и загруженные объекты будут включать в себя все фиксации, которые были бы предком каждой ветки, которая была извлечена. Это означает, что мне удивительно, что вы не получаете все соответствующие теги на git submodule update.

Если это так, то, что вы действительно хотите, для вашего script заключается в попытке установить новую версию подмодуля и зафиксировать этот результат, я не думаю, что git submodule update - это инструмент, который вы хотите - это просто для обеспечения того, чтобы ваши подмодули находились в правильной версии, исходя из того, что в настоящее время происходит в основном проекте. Вместо этого вы должны просто сделать что-то вроде:

( cd my-submodule && \
      git fetch && \
      git fetch --tags && \
      git checkout my-tag )
git add my-submodule
git commit -m 'Update the submodule to the "my-tag" version' my-submodule

(я добавил дополнительный git fetch --tags на всякий случай ваш тэг не тот, который указывает на загруженный фиксатор.)

Очевидно, есть еще одна возможность - указать субмодуль на фиксацию, на которую указывает тэг, а не на сам тег, но это не выглядит так аккуратно.

Ну, единственное, что хранится в главном дереве проекта для подмодуля, - это всего лишь хэш объекта commit, поэтому даже если бы была команда, которая сказала: "Установите мой подмодуль тегу my-tag в этом подмодуле", это в конечном итоге просто сохранило бы хэш, соответствующий этому тегу...

Ответ 2

Поздний ответ здесь, но я удивлен, что никто не упомянул git submodule foreach. Это в основном способ решения конкретной проблемы, с которой вы столкнулись:

git submodule foreach --recursive 'git fetch --tags'
git submodule update --recursive
Флаг

--recursive должен возвращаться в дочерние подмодули.

Ответ 3

git submodule update ничего не извлекает, если ваши подмодули обновлены. Так что это может быть неправильное понимание.

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

Лучше всего использовать cd в ваш подмодуль (который является репозиторием Git) и просто запустить git fetch --tags, а затем git checkout some-tag. После этого подмодуль обновлен в вашем рабочем каталоге до some-tag, и вы можете выполнить его для фиксации.

Ответ 4

вы можете script сделать так, чтобы вы выполнили (cd path-to-submod && git fetch)

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

Надеюсь, что это поможет