Git santechnikos komanda gauna submodulį

Dirbu su git santechnika ir veidrodiniu (ir taip atidarytu) kapinynu tik skaitomoje failų sistemoje.

Matau submodulių egzistavimą su git ls-tree . Galiu išleisti savo pavadinimą / kelią ir SHA1, bet negaliu rasti būdų, kaip pašalinti submodulį.

Informacija yra kažkur; jei klonuosiu repo, git submodule init pavyks. (Klono kūrimas yra pernelyg brangus normaliam naudojimui, ypač labai didelėms saugykloms.) Kaip aš galiu tiesiogiai patekti į nuotolinį modulį?

3
19 дек. Josh Bleecher Snyder nustatė gruodžio 19 d. 2016-12-19 00:22 '16 at 0:22 2016-12-19 00:22
ответ 1 atsakymas

Santrauka

Pradėkite nuo git config --blob HEAD:.gitmodules --list ir eikite iš ten. Tam reikia „Git“ versijos> = 1.8.4. Atkreipkite dėmesį, kad HEAD gali būti bet kokia versija.

Ilga forma ir paaiškinimas

Pastabos virto atsakymu, daugiausia atsakydamos į OP .-) Be to, mes turime tokius savarankiškus apibrėžimus: superprojektas yra „Git“ saugykla, turinti submodulius, ir submodulis (kartais taip pat vadinamas pogrupiu) yra „Git“ saugykla, valdoma superprojekto . Pats submodulis paprastai yra saugomas su konkrečiu įvykiu (t.y., „atjungtu HEAD“), nors šiuo metu yra ypatingų atvejų, kai galite nukreipti „Git“ perjungti modulį į pavadintą filialą. Jei submodulyje yra papildomų modulių, „išorinis“ modulis yra „vidinio“ modulio superprojektas, todėl super / pietūs yra santykinis.

Submodules - saugyklos URL ir jų patikros kelius - pateikia failas, vadinamas .gitmodules superprojekto šakniniame kataloge. Todėl atidarytoje saugykloje gausite arba .gitmodules failą. Šis failas suformatuotas kaip konfigūracijos failas, todėl jį galima skaityti naudojant git config --file .

Kadangi „Git“ yra 2.0 versija, galite naudoti pseudo pavadinimą, kad galėtumėte nurodyti „stdin“:

 git show HEAD:.gitmodules | git config --file - --list 

iš naujo nustato turinį žinomu formatu. (Jei jūsų „Git“ versija yra senesnė, tačiau turite /dev/stdin , čia galite skaityti /dev/stdin .)

Pasirodo, kad yra dar paprastesnis būdas: nuo Git versijos 1.8.4 „ git config gali perskaityti lizdą tiesiai iš saugyklos. Blob id yra kažkas priimtinas git rev-parse , kuris gali tvarkyti ne tik filialo pavadinimą ar įsipareigojimo ID, bet ir tolesnį kelio pavadinimą. (Šis kodas buvo specialiai sukurtas submoduliams valdyti: žr. Įsipareigojimo 1bc888193e1044db317a45b9a4c8d2b87b998f40 .)

Skaityti daugiau

Atsižvelgiant į P modulio kelią, submodulio pavadinimas priklauso nuo to, kuris įrašas turi submodule.name.path nustatytą į P. Šio submoduliuko URL yra submodule.name.url .

Galite rasti vardą, kurio ieškote naudodami git config --get-regexp . Tačiau geriausia tai erzina, nes tuomet privalome remtis kelio komponentais, kurie yra reguliariosios išraiškos metachariai, ir akivaizdus bendras . :

 $ git config --blob HEAD:.gitmodules \ --get-regexp 'submodule\..*\.path' 'some/dir\.name/path' submodule.foo.path some/dir.name/path 

todėl tikriausiai tikslinga tiesiog iš naujo nustatyti konfigūraciją su --list ir naudoti kažką kita, kad išgautumėte įdomius laukus. Pavyzdžiui:

 git config --blob HEAD:.gitmodules --list | \ awk -F= -vpath='some/dir.name/path' \ '$1 ~ /submodule\..*\.path/  $2 == path { split($1, a, "."); print a[2] }' 

(nors tuo metu, kai jį įdėjote į kažką, kas gali skaityti medžius, ieškančius nuorodų, tikriausiai norite šiek tiek Python ar kai kurių tokių).

4
19 дек. atsakymas suteikiamas 19 d. 2016-12-19 10:12 '16 at 10:12 2016-12-19 10:12

Kiti klausimai apie žymas arba Užduoti klausimą