2016-05-30 4 views
2

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

После прочтения некоторые интернет-консультации, я тяну проект и подмодулях следующим образом:

git pull --recurse-submodules 
git submodule update --recursive --remote --init --merge 

Однако иногда проверка состояния подмодулей дает мне что-то вроде:

> git status 
On branch feature 
Your branch is behind 'origin/feature' by 1 commit, and can be fast-forwarded. 
    (use "git pull" to update your local branch) 
nothing to commit, working directory clean 

который разрешенное если я сделаю

git submodule foreach git pull 

Я в затруднении. Не могли бы вы рассказать мне, что я делаю неправильно?

Спасибо!

+0

http://stackoverflow.com/a/21195182/6194839 Возможно, обновление 'git subodule update --remote -merge' или' git subodule foreach git pull origin master' будет работать? Возможно, 'git submodule --help' может указать вам правильный путь. Мой первый инстинкт: у вас может быть команда '--recursive --remote --init --merge', которая не делает то, что, по вашему мнению, делает. –

+0

Можете ли вы объяснить, почему вы думаете, что делаете что-то неправильно? Подмодули не предназначены для обновления, если вы не сообщите им. – eis

+0

@eis, у меня создалось впечатление, что 'git subodule update' вытащит последнее из подмодулей, которое, по-видимому, не –

ответ

-2
git pull origin yourbranch --recursive 
cd submodulebrach 
git checkout submodulebrach 
cd .. 
git commit -m submodule 
git push origin yourbranch 
+0

Я не вижу, как он отвечает на мой вопрос, можете ли вы объяснить? –

+0

Вопрос заключается в том, как обновить локальную версию подмодулей. Я не понимаю, почему вы хотите, чтобы OP нажал изменения здесь. –

2

С комментарием OP:

Я был под впечатлением, что обновление мерзавец подмодуль потянет последний из подмодулей, которые он, по-видимому, не

Действительно Это не. То, что он делает, это объясняется, например here:

обновления

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

слияние

коммит записано в суперпроект будет объединен в текущую ветвь в подмодуле.

В Superproject всегда будет зафиксирована конкретная запись о каждом из его подмодулей. Команда update будет использовать эту фиксацию и проверять ее - она ​​фактически не обновит ее, чтобы ссылаться на любую новую ситуацию, которая может иметь проект.

Вы не делаете ничего плохого как таковое, так оно и работает. Если вы хотите перенести записанную фиксацию на последнюю, вам придется сделать это по-другому. Делать это лучше объясняется в this other thread, но, короче говоря, делать --remote вместо --merge выглядит так, как вы.

+0

Я делаю '--remote' (см. Вопрос), вот что меня смущает. Все, что я читал, похоже, подразумевает, что команды эквивалентны, но они не ведут себя так для меня –

+0

@AlexO ах, только что заметил, что вы используете оба. Вы пытались оставить сливание? – eis

+0

Да, это оставило меня в статусе «отсоединенной головы» на подмодулях –

Смежные вопросы