Моля, някой да ми помогне да разбера подмодулите в git. Знам, че получават много удари в интернет, но тъй като предполагам, че разработчиците на git са умни хора, трябва да има причина за текущото поведение - и може би начин да заобиколя проблема си.
И така, имам проект и някои подмодули. Проектът има различни клонове, като:
- MyApp_version2
- MyApp_version3
- MyApp_version4
- MyApp_litversion
- MyApp_development
Моите подмодули не се актуализират толкова често (може би веднъж седмично), така че съм добре, ако не са прикачени към глава на хранилището на подмодули автоматично.
Въпреки това, когато проверявам стар клон - тъй като трябва да поправя грешка в стара версия на софтуера - също трябва да актуализирам подмодулите.
Защо трябва да правя това?
Бих очаквал git да работи като svn. Когато ангажирам работата си в основното си репо, бих очаквал git да мисли нещо по следния начин: „Добре, той иска да ангажира работата си сега. Виждам, че подмодулите в момента са в ревизия abc, така че когато той в някакъв момент в бъдещето се върне към този ангажимент, той вероятно иска подмодулите в същата ревизия отново."
Не мога да видя нито един случай, в който бихте искали подмодулите да останат в текущата ревизия, докато се връщате 3 години назад в основното си хранилище. Трябва обаче да има причина за това внедряване, нали?
Наистина бих искал да чуя дали някой от вас знае мислите зад това, но във всеки случай наистина бих искал решение. Има ли начин да кажа на git: „Искам да ангажирам тази работа с тези подмодули. Ако в даден момент се върна в това състояние, искам подмодулите също да бъдат проверени в правилната версия.“
Пример за пояснение
Основното ми хранилище е приложение, което трябва да използва SSL, и намирам SSL библиотека (libSSL), която добавям като подмодул.
На 31 октомври 2010 г. създавам ангажимент в основното си хранилище (2fd4e1), докато подмодулът сочи към libSSL версия 3 (c67a2d).
Времето минава, libSSl се актуализира до версия 34, адаптирам кода си, животът е добър.
На 14 май 2013 г. създавам нов комит (28fced) и подмодулът сочи към най-новата версия на libSSL (849ee1).
Въпреки това, ако проверя 2fd4e1, моят подмодул ще остане на 849ee1, въпреки че оригиналният комит е създаден с c67a2d. Git знае, че направих оригиналния комит с c67a2d и не виждам как бихте могли да искате друг подмодул освен този, с който е създаден оригиналният комит.
git checkout
, която да го накара да прави и подходящите неща на подмодула, не бих искал да е активиран по подразбиране... - person twalberg   schedule 11.03.2014git submodule init foo
вероятно трябва да е аналогично наgit clone foo
, ако foo не е url. И ако потребителят иска да направи нещо по-сложно от клониране или плащане, той може просто даcd foo
и да извика git нормално. Това вероятно ще направи всички тези неясни команди интуитивни и лесни за използване. - person VinGarcia   schedule 11.02.2017