git подмодулът проверява същия комит

След I git submodule update той винаги проверява един и същ ангажимент. например 34561.

Правя git checkout master за подмодул и след това git submodule sync. След това сочи към последния ангажимент a2344.

Но след update отново сочи към ангажимента 34561.

Как да го промените? Имам предвид защо реши да посочи този ангажимент, а не друг?


person lapots    schedule 20.05.2015    source източник


Отговори (4)


Имам предвид защо реши да посочи този ангажимент, а не друг?

Тъй като подмодулът винаги записва фиксиран SHA1 ангажимент в родителското репо като gitlink (a < strong>специален запис в индекса).
Ето защо подмодул винаги се възстановява като отделен клон HEAD

Можете да конфигурирате подмодул да следва клон

cd /path/to/your/parent/repo
git config -f .gitmodules submodule.<path>.branch <branch>

Подмодулът пак ще бъде възстановен до фиксиран ангажимент, но след това може да бъде актуализиран с:

git submodule update --remote

Уверете се, че сте добавили и ангажирали новата gitlink в родителското репо (тъй като актуализирането на подмодул до най-новия от клон ще промени неговия SHA1, записан в родителското репо като gitlink).
Ако ако не го направите, ще намерите обратно своя подмодул в предишното му състояние на следващия git submodule update --init.

Вижте повече в „Git submodules: Specify a branch/tag“.

person VonC    schedule 20.05.2015

„Основният“ проект съдържа препратка към SHA-1 на изтеглената версия на всеки подмодул. Това е част от ангажимента в основния проект.

Ако промените главата на подмодул ръчно в подмодула, трябва да кажете на главния проект, че отсега нататък трябва да използва този SHA-1 за подмодула.

git commit -a

ще направи това, тъй като основният проект ще види, че главата на подмодулите е актуализирана.

Това може да е изненадващо, но всъщност е хубава функция. С проверката в главата в основния проект вие основно казвате на колегите си, че вече е добре да използвате по-новата версия на подмодула. Това позволява на хората да работят заедно без прекалено голям риск от издърпване на килима под краката на другите.

(Като се има предвид това, има много брадавици в работния процес с подмодули и вероятно трябва да приемете подход и да го циментирате с някои екипни скриптове, за да избегнете капаните).

person Peter Tillemans    schedule 20.05.2015

Трябва да влезете в папката на подмодула и да изпълните:

git fetch --all --prune
git pull origin master

И сега ще имате последния комит в подмодула.
След като стартирате извличането, той актуализира вашата папка .git под подмодула с най-новите комити. Това ще гарантира, че имате последните промени.

person CodeWizard    schedule 20.05.2015
comment
въпросът не е как да получите най-новото, а защо проверява този конкретен 34561 commiy - person lapots; 20.05.2015
comment
Трябва да видя хранилището, за да се уверя, но изглежда, че вашият подмодул не е актуализиран, така че продължавате да получавате същото хранилище. Можете ли да публикувате последния идентификатор на ангажимент на вашия подмодул преди и след git submodule update - person CodeWizard; 20.05.2015

Можете да изпълните:

git submodule foreach git pull origin master

Това ще актуализира всички ваши подмодули.

person Yordan Ivanov    schedule 20.05.2015
comment
Аз правя абсолютно същото (но само git submodule foreach git pull). Въпросът е защо винаги се актуализира до един и същ 34561 ангажимент - person lapots; 20.05.2015
comment
Git съхранява ID на SHA1 комит в базата данни на хранилището. Заключването на подмодула с конкретен ИД на ангажимент ви гарантира, че вашият код ще работи и няма да бъдат приложени промени, които нарушават правилата при актуализация. Въпреки това, ако изтеглите главния, вашето хранилище ще се заключи с последния комит. - person Yordan Ivanov; 20.05.2015