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

Git подмодуль init не вытягивает последнюю фиксацию

У меня есть репозиторий git с подмодулем git внутри него. Подмодуль размещен на битбакете. Я хочу обновить локальную копию подмодуля до его последней фиксации. Я устал " git обновление подмодуля", но это ничего не делает. Поэтому я попытался удалить папку подмодуля, а затем сделать " git подмодуль init". Однако он просто вытягивает исходный компилятор подмодуля, а не последний.

Как я могу заставить свой локальный подмодуль обновляться до последней фиксации?

4b9b3361

Ответ 1

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

Что вам нужно сделать:

cd mysubmoduledir
git fetch
git checkout master # or any other branch that you need the latest of
git merge origin/master
cd -  # go back to the top repo
git status # should show that your submodule changed
git add mysubmoduledir
git commit -m "Updated my solution to use latest sub project."

более короткая версия:

cd mysubmoduledir
git pull # assumes you are already on the branch you need to be on
cd -
git commit -am "Updated submodule" # assumes you had no other modified files

Слово "обновление" не подходит для этой команды подмодуля. Это действительно означает "указать подмодуль на фиксацию, которую ожидает родительское репо".

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

Ответ 2

Каждый коммит git, который включает подмодуль, привязывается к определенному комманду в репозитории подмодулей.

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

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

Ответ 3

Просто попробуйте выполнить команду ниже, после того как вы добавили свои подмодули.

для git v 1.8.x

git submodule update --init --recursive --remote

для v1.7.x:

git submodule update --init --recursive или git pull --recurse-submodules

для v1.6.x

git submodule foreach git pull origin master

чтобы проверить версию git.

git version