/ Môže sa vykonať aktualizácia submodulu pre načítanie značiek v submodulách? - git, git-submoduly, git-tag

Je možné vykonať aktualizáciu submodulov pre načítanie značiek v submodulách? - git, git-submoduly, git-tag

Mám úložisko git, ktoré používa submodul, ktorý by som rád poukázal na anotovanú značku, ale keď to robím git submodule update nové tagy sa nedajú načítať.Môžem získať nové značky v submodule pomocou cd-ing do submodule a robiť git fetch --tags tam, ale naozaj som rád robiť to všetko zvonku, ako je napísané.

Nenašiel som nič v dokumentácii git, čo by naznačovalo spôsob, ako sa dostať git submodule update zahrnúť značky (moja git verzia je 1.7.3.5).

Je zrejmé, že je tu aj iná možnosť - poukázať na to, že podzmieč na odhodlanie označuje značku skôr než samotnú značku, ale to sa nezdá byť tak elegantné.

Existuje spôsob, ako sa dostať git submodule update zahrnúť značky?

odpovede:

7 pre odpoveď č. 1

git submodule je implementovaný ako skript pre shell, takže je ľahké vidieť, čo robí - môže to byť /usr/lib/git-core/git-submodule ak používate zabalenú verziu, v podstate to beží git-fetch v submoduloch, ak názov objektu (SHA1sum) uložený v hlavnom projekte stromu nezodpovedá verzii, ktorá bola vykonaná v submodule, pretože Koraktor poukazuje.

Na dokumentácia pre git fetch (alebo man git-fetch keď kernel.org dole) hovorí, že by priniesla každý tag, ktorý odkazuje na objekt programu stiahnutý a stiahnuté objekty zahrnie každý commit ktoré "s predkom každej pobočke ktoré" s pritiahnuté za vlasy.Znamená to, že "s prekvapujúce sa mi, že nemusíš" t dostať všetky relevantné Tagy git submodule update.

Ak to "s prípad, že to, čo naozaj chcete je pre váš skript je pokúsiť sa nastaviť novú verziu submodul a zaviazať, že výsledok, som don" t myslíte, že git submodule update je nástroj, ktorý chcete - že "s len za uistite sa, že vaše podmodulov sú na správnu verziu na základe čo"s v súčasnosti hlavným projektom"s commit.Namiesto toho by ste mali urobiť len niečo ako:

( cd my-submodule && 
git fetch && 
git fetch --tags && 
git checkout my-tag )
git add my-submodule
git commit -m "Update the submodule to the "my-tag" version" my-submodule

(Pridal som extra git fetch --tags len v prípade tag isn "t, ktorá poukazuje na stiahnuté commit.)

Je zrejmé, že je tu aj iná možnosť - poukázať na to, že podzmieč na odhodlanie označuje značku skôr než samotnú značku, ale to sa nezdá byť tak elegantné.

Dobre, jediná vec, že "s uložené v hlavnom projekte" s strom pre submodul len hash commit objekt, tak aj keby existovali príkaz, ktorý povedal "by mala moja submodul tag my-tag v že submodul", by to skončiť len ukladanie hash zodpovedajúcu značku rovnako...


13 pre odpoveď č. 2

Neskorú odpoveď tu, ale som prekvapený, že nikto zmienil git submodule foreach. To je v podstate spôsob, ako som vyriešil presný problém ste sa stretli:

git submodule foreach --recursive "git fetch --tags"
git submodule update --recursive

--recursive vlajka je tam recurse do dieťa podmodulov.


3 pre odpoveď № 3

git submodule update Copak "t priniesť nič, ak váš podmodulov sú aktualizované. Takže to môže byť pochopeniu.

git submodule update prinesie pracovného adresára obsah podmodulov vo vašom úložisku definované štátu (t. j.Pozrite sa na odovzdanie submodul, ktorý bol definovaný v úložisku).

Lepší spôsob, ako by sa cd do vášho submodul, (čo je Git repozitára, sama o sebe) a stačí spustiť git fetch --tags a potom git checkout some-tag. Potom, čo bol aktualizovaný submodul vo vašom pracovnom adresári na some-tag a môže stupeň viazania.


0 pre odpoveď č. 4

môžete skript, tak, že si (cd path-to-submod && git fetch)

balenie príkazy v zátvorkách stavia prostredia subshell, čo znamená, môžete don "t mať CD späť, aby tam, kde ste boli.

Dúfam, že to pomôže