Próbuję wyświetlić ostatnie zatwierdzenie w Git, ale potrzebuję daty w specjalnym formacie.
Wiem, że format dziennika jest dość %ad
zgodny z --date
formatem, ale jedyny --date
format, jaki mogę znaleźć, jest „krótki”. Chcę poznać innych i czy mogę stworzyć niestandardowy, taki jak:
git -n 1 --date=**YYMMDDHHmm** --pretty=format:"Last committed item in this release was by %%an, %%aD, message: %%s(%%h)[%%d]"
git
command-line
ar3
źródło
źródło
--date=iso-strict
: zobacz moją odpowiedź poniżej--date=(relative|local|default|iso|iso-strict|rfc|short|raw)
będziesz mieć również:--date=(relative-local|default-local|iso-local|iso-strict-local|rfc-local|short-local|raw-local)
Odpowiedzi:
Pozostali to (od
git help log
):Nie znam żadnego wbudowanego sposobu tworzenia niestandardowego formatu, ale możesz zrobić trochę magii powłoki.
W pierwszym kroku otrzymasz milisekundowy znacznik czasu. Możesz zmienić drugą linię, aby sformatować ten znacznik czasu w dowolny sposób. Ten przykład daje coś podobnego do
--date=local
wyściełanego dnia.A jeśli chcesz uzyskać trwały efekt bez wpisywania tego za każdym razem, spróbuj
Lub, aby mieć wpływ na całe wykorzystanie Git na tym koncie
źródło
git config log.date iso
lub, aby wpłynąć na całe wykorzystanie gita na tym konciegit config --global log.date iso
--format:<args>
przejdzie<args>
do strftime.Oprócz tego
--date=(relative|local|default|iso|iso-strict|rfc|short|raw)
, jak wspominali inni, możesz również użyć niestandardowego formatu daty dziennika zTo daje coś takiego
2016-01-13 11:32:13
.UWAGA: Jeśli spojrzysz na zmianę, do której link znajduje się poniżej, uważam, że będziesz potrzebować przynajmniej, Git v2.6.0-rc0aby to zadziałało.
W pełnym poleceniu byłoby to coś takiego:
Nie udało mi się znaleźć tego w dokumentacji nigdzie (jeśli ktoś wie, gdzie to znaleźć, proszę o komentarz), więc pierwotnie znalazłem symbole zastępcze metodą prób i błędów.
Podczas moich poszukiwań dokumentacji na ten temat znalazłem zobowiązanie do samego Git które wskazuje, że format jest podawany bezpośrednio
strftime
. Wyszukiwaniestrftime
( tutaj lub tutaj ) symboli zastępczych, które znalazłem, pasuje do wymienionych symboli zastępczych.Symbole zastępcze obejmują:
W pełnym rozkazie byłoby to coś w rodzaju
źródło
git config --global alias.lg "log --graph --decorate -30 --all --date-order --date=format:'%Y-%m-%d %H:%M:%S' --pretty=format:'%C(cyan)%h%Creset %C(black bold)%ad%Creset%C(auto)%d %s'"
git lg
i nadal otrzymuję następujący błąd.fatal: unknown date format format:%Y-%m-%d %H:%M:%S
. Uruchamiam git w systemie Windows. Oto moja wersja gita.git version 1.9.5.msysgit.1
. Więc czy muszę uaktualnić do nowszej wersji?%X
, ~~ Właśnie wypróbowałem to na moim komputerze i zdecydowanie sprawdzam czasy w mojej strefie czasowej. ~~ Hmm, teraz nie jestem pewien. Sklonowałem repozytorium od kogoś spoza mojej strefy czasowej i spróbowałem ponownie. Myślę, że po prostu otrzymuję formatowanie czasu przy użyciu bieżących ustawień regionalnych, ale z odciętą strefą czasową.Po długim czasie szukania sposobu na
git log
wyświetlenie daty w formacie,YYYY-MM-DD
który by działałless
, wymyśliłem następujący format:wraz z przełącznikiem
--date=iso
.Spowoduje to wydrukowanie daty w formacie ISO (długiej), a następnie 14-krotność znaku cofnięcia (0x08), który w moim terminalu skutecznie usuwa wszystko po części RRRR-MM-DD. Na przykład:
To daje coś takiego:
To, co zrobiłem, to utworzenie aliasu o nazwie
l
z kilkoma poprawkami w powyższym formacie. Pokazuje wykres zatwierdzenia po lewej stronie, następnie hash zatwierdzenia, a następnie datę, nazwy skrócone, nazwy refnames i temat. Alias jest następujący (w ~ / .gitconfig):źródło
--date=short shows only date but not time, in YYYY-MM-DD format.
| sort | uniq
nie działają.%C(bold cyan)%ai%x08%x08%x08%x08%x08%x08%x08%x08%x08%C(reset) %C(bold green)(%ar%x08%x08%x08%x08)%C(reset)
aby uzyskać format2015-01-19 11:27 (11 days)
. +1Możesz użyć opcji obcinania pola, aby uniknąć tak wielu
%x08
znaków. Na przykład:jest równa:
I trochę łagodniejszy dla oczu.
Jeszcze lepiej, w tym konkretnym przykładzie użycie
%cd
będzie honorować--date=<format>
, więc jeśli chceszYYYY-MM-DD
, możesz to zrobić%<
i%x08
całkowicie uniknąć :Właśnie zauważyłem, że jest to trochę okrągłe w stosunku do oryginalnego postu, ale zostawię to na wypadek, gdyby inni przybyli tutaj z tymi samymi parametrami wyszukiwania, co ja.
źródło
Potrzebowałem tego samego i zauważyłem, że działa dla mnie:
--date=format
Formatuje wyjście datę którym--pretty
mówi co wydrukować.źródło
git log --pretty=format:"%h%x09%cd%x09%s" --date=format:'%Y-%m-%d %H:%M:%S %p'
Pamiętaj o
date=iso
formacie „ ”: nie jest to dokładnie ISO 8601 .Zobacz zatwierdzenie „ 466fb67 ” z Beat Bolli (
bbolli
) , dla Git 2.2.0 (listopad 2014)ładny: podaj ścisły format daty ISO 8601
Zobacz ten wątek do dyskusji.
źródło
Pamiętaj, że spowoduje to konwersję na lokalną strefę czasową, jeśli ma to znaczenie dla twojego przypadku użycia.
źródło
Git 2.7 (Q4 2015) zostanie wprowadzony
-local
jako instrukcja.Oznacza to, że oprócz:
będziesz mieć również:
-local
Przyrostek nie może być stosowany zraw
lubrelative
. Odniesienie .Możesz teraz poprosić o dowolny format daty, korzystając z lokalnej strefy czasowej . Widzieć
johnkeeping
) .Zobacz commit add00ba , commit 547ed71 (03 września 2015) autor: Jeff King (
peff
) .(Scalone przez Junio C Hamano -
gitster
- w zatwierdzeniu 7b09c45 , 05 października 2015)W szczególności ostatni z powyższych (commit add00ba) wspomina:
źródło
format-local
działa też! Więc jest to bardzo idealne połączenie mocy między ulubionym formatem i lokalnym.Opcja formatu
%ai
była tym, czego chciałem:źródło
W Git 2.21 (Q1 2019) wprowadzono nowy format "
--date=human
" daty, który zmienia dane wyjściowe w zależności od tego, jak bardzo czas jest od aktualnego czasu ."
--date=auto
" może być użyty do użycia tego nowego formatu, gdy wyjście jest kierowane na pager lub terminal, a poza tym format domyślny.Zobacz commit 110a6a1 , commit b841d4f (29 stycznia 2019) i commit 038a878 , commit 2fd7c22 (21 stycznia 2019) autorstwa Stephena P. Smitha (``) .
Zobacz commit acdd377 (18 stycznia 2019) autorstwa Linusa Torvaldsa (
torvalds
) .(Połączone przez Junio C Hamano -
gitster
- w zatwierdzeniu ecbe1be , 07 lutego 2019 r.)Git 2.24 (Q4 2019) uprościł kod.
Zobacz commit 47b27c9 , commit 29f4332 (12 września 2019) autorstwa Stephena P. Smitha (``) .
(Scalone przez Junio C Hamano -
gitster
- w zatwierdzeniu 36d2fca , 07 października 2019)źródło
źródło
Użyj Bash i polecenia daty, aby przekonwertować z formatu podobnego do ISO na taki, który chcesz. Chciałem mieć format daty w trybie organizacyjnym (i element listy), więc zrobiłem to:
A wynik to na przykład:
źródło