Kaip rasti „git“ datą naudojant tik santechnikos komandas?

Jau paklausėte, kaip rasti įvykdymo datą „Git“. Tačiau visuose atsakymuose į šį klausimą naudojami git show arba git log komandos , kurios taip pat yra porceliano komandos ; Standartinė porceliano komandų išmintis atrodo, kad jų išvesties formatas gali keistis, todėl, jei įmanoma, venkite jų naudoti scenarijuose.

Ar yra būdas gauti git timestamp, naudojant tik santechnikos komandas?

1
08 окт. Pont rinkinys 08 spalis 2018-10-08 22:01 '18, 10:01 val. 2018-10-08 22:01
@ 3 atsakymai

Įsipareigojimo objekto formatas yra toks:

 tree SP SHA_1_NAME_AS_HEX LF parent SP SHA_1_NAME_AS_HEX LF ... author SP any number of words SP <email_addr> SP TIMESTAMP SP TZ_OFFSET LF committer SP any number of words SP <email_addr> SP TIMESTAMP SP TZ_OFFSET LF LF commit message LF LF extensive commit message 

(Kai SP yra ASCII tarpo simbolis, 0x20 ir LF yra ASCII eilutės simbolis, 0x0a).

Todėl, norint pasiekti tai, ką norite, jūs:

  1. Skambinkite „ git cat-file commit <commitish_of_interest>
  2. Iterate per tai, kad ši programa atkuria ją į stdout išilgai LF linijų.
  3. Sustabdyti liniją, kuri prasideda author SP .
  4. Padalinkite jį į tarpus ir paimkite du paskutinius laukus. Pirmasis yra sekundžių skaičius nuo 00:00 laiko juostoje, kurį apibrėžia antrasis laukas, kurio formatas yra SHHMM kur S yra ženklas, - arba + , kuris nustato, kur poslinkis yra atitinkamai į vakarus arba į rytus nuo Grinvičo, ir HHMM - tai laiko juostos kompensacija HH valandomis ir MM minutėmis.
  5. Apdorokite šių dviejų laukų reikšmes formatuodami laiko žymę.

Atkreipkite dėmesį, kad author ir committer laukų turinys yra vienodas tik „įprastiems“ įsipareigojimams. Iš naujo įdiegus įsipareigojimą, bent laiko žymos gali skirtis, o jei įsipareigojimas buvo atstatytas kito asmens, be asmens, kuris faktiškai sukūrė įsipareigojimą (jo autorius), laukai bus skirtingi. Tas pats pasakytina ir apie įsipareigojimus, sukurtus iš git am patches.

2
08 окт. atsakymą pateikė kostix 08 spalis 2018-10-08 23:19 '18 at 11:19 pm 2018-10-08 23:19

git cat-file -p HASH_OF_COMMIT sugrąžins git cat-file -p HASH_OF_COMMIT . Taigi, turėsite prieigą prie visų metaduomenų, o tai reiškia, kad autoriaus ir kūrinio data.

2
08 окт. Philippe Oct 08 atsakymas 2018-10-08 22:44 '18, 10:44 val. 2018-10-08 22:44

Git šiek tiek silpnesnis, kad teisingai atskirti santechniką ir porcelianą. Patarimai, kaip naudoti santechnikos komandas scenarijuose, yra gera, bet kartais komanda - pvz., git log nėra tinkamos vandentiekio parinkties, tačiau jame yra parinkčių, kurios padaro „plumby“, jei galiu padaryti žodį.

Tokiu atveju atitinkama komanda:

 git log --pretty=format:%ad --no-walk <hash> 

(arba ta pati su %cd kaip formato direktyvoje, skirtoje kliento datai, pridėkite įvairias datos formatavimo parinktis, pats „ git log %aD į git log arba, pavyzdžiui, %aD kad pakeistumėte datos formatą). Nėra jokio log.decorate kad „ git log negali pridėti naujų funkcijų, pvz., log.decorate parametro, kuris gali jį sulaužyti, ir „Git“ turėtų su ja susieti ir pridėti --porcelain į komandas, kurios elgiasi kaip git status . (Atkreipkite dėmesį, kad dabar git status turi --porcelain ir --porcelain=v2 , kurios abu konvertuoja jas į santechniką. Neprašykite manęs, kodėl tai nėra parašyta ...)

1
08 окт. atsakymas duotas torek 08 okt. 2018-10-08 23:36 '18 at 11:36 pm 2018-10-08 23:36

Kiti klausimai apie žymes arba užduoti klausimą