Git подмодуль init не вытягивает последнюю фиксацию
У меня есть репозиторий git с подмодулем git внутри него. Подмодуль размещен на битбакете. Я хочу обновить локальную копию подмодуля до его последней фиксации. Я устал " git обновление подмодуля", но это ничего не делает. Поэтому я попытался удалить папку подмодуля, а затем сделать " git подмодуль init". Однако он просто вытягивает исходный компилятор подмодуля, а не последний.
Как я могу заставить свой локальный подмодуль обновляться до последней фиксации?
Ответы
Ответ 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