Soru Git günlüğü tarih formatları nasıl değiştirilir


Git içindeki son işlemi göstermeye çalışıyorum ama tarihe özel bir biçimde ihtiyacım var.

Günlük oldukça formatını biliyorum %ad saygı duyuyor --date format, ama sadece --date bulabildiğim biçim "kısa". Diğerlerini tanımak ve özel bir tane oluşturabilir miyim?

git -n 1 --date=**YYMMDDHHmm** --pretty=format:"Last committed item in this release was by %%an, %%aD, message: %%s(%%h)[%%d]"

91
2017-10-21 17:56


Menşei


Ben her zaman resmi Linux Kernel Git belgeleri Bu tür sorular için mükemmel bir kaynak olmak.
Not: şimdi (Kasım 2014, Git 2.2) var --date=iso-strict: görmek cevabım aşağıda - VonC
Git 2.7 ile (Q4 2015), kullanmak isteyebilirsiniz yerel saat dilimi herhangi bir tarih formatı için! Görmek cevabım aşağıda. Buna ek olarak, --date=(relative|local|default|iso|iso-strict|rfc|short|raw), ayrıca olacak: --date=(relative-local|default-local|iso-local|iso-strict-local|rfc-local|short-local|raw-local) - VonC
İlgili: Git'deki eski bir işlemin zaman damgasını nasıl değiştirebilirim? - kenorb


Cevaplar:


Diğerleri git help log):

--date=(relative|local|default|iso|rfc|short|raw)
  Only takes effect for dates shown in human-readable format,
  such as when using "--pretty".  log.date config variable
  sets a default value for log command’s --date option.

--date=relative shows dates relative to the current time, e.g. "2 hours ago".

--date=local shows timestamps in user’s local timezone.

--date=iso (or --date=iso8601) shows timestamps in ISO 8601 format.

--date=rfc (or --date=rfc2822) shows timestamps in RFC 2822 format,
  often found in E-mail messages.

--date=short shows only date but not time, in YYYY-MM-DD format.

--date=raw shows the date in the internal raw git format %s %z format.

--date=default shows timestamps in the original timezone
  (either committer’s or author’s).

Özel bir biçim oluşturmayı bildiğim yerleşik bir yol yoktur, ancak bazı kabuk büyüsü yapabilirsiniz.

timestamp=`git log -n1 --format="%at"`
my_date=`perl -e "print scalar localtime ($timestamp)"`
git log -n1 --pretty=format:"Blah-blah $my_date"

İlk adımda milisaniye zaman damgası alır. İstediğiniz zaman damgasını biçimlendirmek için ikinci satırı değiştirebilirsiniz. Bu örnek size benzer bir şey verir --date=local, yastıklı bir gün.


Ve her seferinde yazmadan kalıcı etki istiyorsanız, deneyin.

git config log.date iso 

Veya, bu hesapla tüm git kullanımınızda etkili olması için

git config --global log.date iso

118
2017-10-21 18:26



Ve her seferinde yazmadan kalıcı etki istiyorsanız, git config log.date iso veya bu hesabın tüm git kullanımınızda etkili olması için git config --global log.date iso - Stéphane Gourichon
Kendi formatlarını kullanabilirsin. görmek Ben Allred'ın cevabı. --format:<args> geçecek <args> strftime'a. - Captain Man


Ek olarak --date=(relative|local|default|iso|iso-strict|rfc|short|raw)Diğerlerinin de belirttiği gibi, özel bir tarih ve tarih formatı da kullanabilirsiniz.

--date=format:'%Y-%m-%d %H:%M:%S'

Bu çıktılar gibi bir şey 2016-01-13 11:32:13.

NOT: Aşağıdaki bağlantıya bir göz attığınızda, en azından ihtiyaç duyacağınıza inanıyorum. Git v2.6.0-rc0 Bunun çalışması için.

Bunu herhangi bir yerde dokümantasyonda bulamadım (birisi bunu nerede bulacağını biliyorsa, lütfen yorum yapın), bu yüzden başlangıçta yer tutucuları deneme yanılma yöntemiyle buldum.

Bu konuyla ilgili araştırmalarımda buldum Git kendisine bir taahhüt bu formatın doğrudan strftime. Bakmak strftime (İşte veya İşte) Bulduğum yer tutucular, listelenen yer tutucularla eşleşiyor. Yer tutucuları içerir

%a        Abbreviated weekday name
%A        Full weekday name
%b        Abbreviated month name
%B        Full month name
%c        Date and time representation appropriate for locale
%d        Day of month as decimal number (01 – 31)
%H        Hour in 24-hour format (00 – 23)
%I        Hour in 12-hour format (01 – 12)
%j        Day of year as decimal number (001 – 366)
%m        Month as decimal number (01 – 12)
%M        Minute as decimal number (00 – 59)
%p        Current locale's A.M./P.M. indicator for 12-hour clock
%S        Second as decimal number (00 – 59)
%U        Week of year as decimal number, with Sunday as first day of week (00 – 53)
%w        Weekday as decimal number (0 – 6; Sunday is 0)
%W        Week of year as decimal number, with Monday as first day of week (00 – 53)
%x        Date representation for current locale
%X        Time representation for current locale
%y        Year without century, as decimal number (00 – 99)
%Y        Year with century, as decimal number
%z, %Z        Either the time-zone name or time zone abbreviation, depending on registry settings; no characters if time zone is unknown
%%        Percent sign

94
2018-01-13 23:04



Bu çalışmıyor. Bir örnek verebilir misiniz?? - Shiva
@Shiva: Son zamanlarda işe yaramadığı bir davaya rastladım ve karşılaştığınız şey aynı olabilir. Git'in eski bir sürümüyle eşleştirme makinesi kullanıyordum. Git'i güncellediğimde özel tarih formatı çalışmaya başladı. Yukarıdaki bağlantıya bir göz attığınızda, en azından v2.6.0-rc0'a ihtiyacınız olacağına inanıyorum. Verilen örnek tam olarak kullandığım şey. Tam bir komutta böyle bir şey olurdu 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'" - Ben Allred
Teşekkürler Ben! Komutunu olduğu gibi yapıştırdım ve git lg ve hala aşağıdaki hatayı alıyorum. fatal: unknown date format format:%Y-%m-%d %H:%M:%S. Pencerelerde git koşuyorum. İşte git sürümüm. git version 1.9.5.msysgit.1. Yani daha yeni sürüme geçmek zorunda mıyım? - Shiva
Merhaba Ben, eski sürümdeydim. En son sürüme geçtim ve bu iş. Bu yüzden cevabınızı daha net hale getirmek için düzenledim (yorumunuzu üste taşıdınız) ve ayrıca + 1'lediniz! Teşekkürler!! - Shiva
@EdRandall: Söz konusu iseniz %X, ~~ Sadece makinemde denedim ve zaman dilimimde kesinlikle zaman aldım. ~~ Hmm, şimdi emin değilim. Zaman dilimimde olmayan birinden bir repo aldım ve tekrar denedim. Sanırım şu anki yerel ayarları kullanarak biçimlendirilmiş zamanı alıyorum ama saat dilimi kesiliyor. - Ben Allred


Uzun bir zaman sonra almak için bir yol arıyor git log tarihi formatta formatla YYYY-MM-DD işe yarayacak şekilde less, Şu formatla geldim:

%ad%x08%x08%x08%x08%x08%x08%x08%x08%x08%x08%x08%x08%x08%x08

anahtar ile birlikte --date=iso.

Bu, tarihi ISO biçiminde (uzun bir) basacak ve daha sonra, terminalimde, YYYY-AA-GG bölümünden sonra her şeyi etkin bir şekilde kaldıran 14x backspace karakterini (0x08) basacaktır. Örneğin:

git log --date=iso --pretty=format:'%ad%x08%x08%x08%x08%x08%x08%x08%x08%x08%x08%x08%x08%x08%x08%aN %s'

Bu gibi bir şey verir:

2013-05-24 bruno This is the message of the latest commit.
2013-05-22 bruno This is an older commit.
...

Yaptığım şey, adında bir takma ad oluşturmaktı l Yukarıdaki formatta bazı tweaks ile. İşleniş grafiğini sola, sonra da işin karmaşasını, ardından tarihi, kısa adları, referansları ve özneyi gösterir. Diğer ad şu şekildedir (~ / .gitconfig dosyasında):

[alias]
        l = log --date-order --date=iso --graph --full-history --all --pretty=format:'%x08%x09%C(red)%h %C(cyan)%ad%x08%x08%x08%x08%x08%x08%x08%x08%x08%x08%x08%x08%x08%x08%x08 %C(bold blue)%aN%C(reset)%C(bold yellow)%d %C(reset)%s'

36
2018-05-24 13:20



Bu benim için çok iyi çalışıyor. % 6 x08 kullanımı tam olarak benim için takip eden saat dilimini kaldırır. - Penghe Geng
hack çözüm ama işe yarıyor! - firesofmay
Ne dersin --date=short shows only date but not time, in YYYY-MM-DD format. - Paaske
Zsh ve bash'da bu size terminalde çıkış gösterir, ancak herhangi bir şeye aktarırsanız, "backspaced" veri hala var. Bu gibi şeyler demektir | sort | uniq çalışma - chmac
Bu aynı zamanda gülünç ve müthiş. kullanıyorum %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) formatı almak 2015-01-19 11:27 (11 days). +1 - naught101


Çok fazla önlemek için alan kesme seçeneğini kullanabilirsiniz. %x08 karakter. Örneğin:

git log --pretty='format:%h %s%n\t%<(12,trunc)%ci%x08%x08, %an <%ae>'

eşdeğerdir:

git log --pretty='format:%h %s%n\t%ci%x08%x08%x08%x08%x08%x08%x08%x08%x08%x08%x08%x08%x08%x08%x08, %an <%ae>'

Ve gözler üzerinde oldukça kolay.

Daha da iyisi, bu özel örnek için, %cd onurlandıracak --date=<format>eğer istersen YYYY-MM-DDbunu yapabilir ve önleyebilirsiniz %< ve %x08 Baştan sona:

git log --date=short --pretty='format:%h %s%n\t%cd, %an <%ae>'

Ben sadece bu orijinal yazıya göre biraz dairesel olduğunu fark ettim ama diğerleri benim yaptığım aynı arama parametreleri ile buraya gelmesi durumunda onu bırakacağım.


23
2017-09-24 16:25





"Farkında ol"date=iso"format: değil kesinlikle  ISO 8601.
İşlemi gör466fb67"dan Bolli yendibbolli), Git 2.2.0 için (Kasım 2014)

güzel: sıkı bir ISO 8601 tarih formatı sağlayın

Git'in "ISO" tarih formatı, küçük farklılıklar nedeniyle ISO 8601 standardına uygun değildir ve ISO 8601 yalnızca ayrıştırıcılarla, örn. XML araçlarınınkileri.

"Den çıktı"--date=iso"bu yollarla ISO 8601'den sapıyor:

  • yerine bir boşluk T tarih / zaman sınırlayıcısı
  • Saat ve saat dilimi arasında boşluk
  • saat diliminin saat ve dakikaları arasında kolon yok

Göndereni ve yazar tarihlerini görüntülemek için sıkı bir ISO 8601 tarih biçimi ekleyin.
  Kullan '%aI' ve '%cI'biçimlendiricileri biçimlendirin ve ekleyin'--date=iso-strict'veya'--date=iso8601-strict'tarih formatı isimleri.

Görmek bu konu tartışma için.


14
2017-11-16 20:20



Bunun için teşekkürler. İnsanlar bunu unutur. - Michael-O


Ben de aynı şeye ihtiyacım vardı ve aşağıdaki işleri benim için buldum:

git log -n 1 --pretty='format:%cd' --date=format:'%Y-%m-%d %H:%M:%S'

--date=format tarih çıktısını formatlar --pretty ne yazdırılacağını söyler.


12
2017-09-06 00:49



Bu benim için çalışmıyor. "Bilinmeyen tarih biçimi" alıyorum - Jim
Git hangi sürümü var? - lac_dev
git sürüm 2.5.4 (Apple Git-61) - çalışmıyor - amateur barista
Kullanarak güncellendi medium.com/@katopz/how-to-upgrade-git-ff00ea12be18 - amateur barista
git log --pretty=format:"%h%x09%cd%x09%s" --date=format:'%Y-%m-%d %H:%M:%S %p' - amateur barista


date -d @$(git log -n1 --format="%at") +%Y%m%d%H%M

Kullanım durumunuz için önemli olması durumunda, bu durumun yerel saat diliminize döneceğini unutmayın.


11
2018-04-12 03:47



Teşekkürler. % Ct ile tweaked - cagney


Biçim seçeneği %ai istediğim şeydi:

%ai: yazar tarihi, ISO 8601 benzeri format

--format="%ai"

5
2018-04-29 20:50





Git 2.7 (Q4 2015) tanıtılacak -local bir talimat olarak.
Buna ek olarak, şu anlama gelir:

--date=(relative|local|default|iso|iso-strict|rfc|short|raw)

ayrıca olacak:

--date=(default-local|iso-local|iso-strict-local|rfc-local|short-local)

-local sonek ile kullanılamaz raw veya relative. Referans.

Artık herhangi bir tarih formatı isteyebilirsiniz yerel saat dilimini kullanma. Görmek

Görmek add00ba işlemek, taahhüt 547ed71 (03 Eylül 2015) tarafından Jeff Kingpeff).
(Birleştirilmiş Junio ​​C Hamano - gitster - içinde taahhüt 7b09c45, 05 Eki 2015) 

Özellikle, sonuncusu (add00ba taahhüt) sondan bahseder:

date: Yapmak "local"tarih formatına ortogonal:

Çoğumuz "--date"modlar, tarihin formatıyla ilgilidir: hangi öğeleri gösterdiğimiz ve hangi sırada.
  Fakat "--date=local"biraz garip bir topar. Bu, tarihi normal biçimde, ancak yerel saat dilimini kullanarak" gösterir.
  Kullandığımız zaman dilimi gerçek biçime ortogonal ve "yerelleştirilmiş iso8601" vb.

Bu yama ekliyor "local"boole alanı"struct date_mode"ve düşer DATE_LOCAL öğesinden date_mode_type enum (şimdi sadece DATE_NORMAL artı local=1).
  Yeni özellik, kullanıcı ekleyerek erişilebilir-local"herhangi bir tarih moduna (ör."iso-local") ve koruyoruz"local"takma ad olarak"default-local"geriye dönük uyumluluk için.


4
2017-10-07 10:45



Buna dikkat etmeliyim format-local çok çalışıyor! Bu yüzden favori format ve yerel arasındaki gücü birleştirmek çok mükemmel. - acgtyrant


git log -n1 --format="Last committed item in this release was by %an, `git log -n1 --format=%at | awk '{print strftime("%y%m%d%H%M",$1)}'`, message: %s (%h) [%d]"

3
2017-10-24 21:37



Detaylandırmaya özen gösterilsin mi? Ayrıca, cevabınızın zaten bir yazar alanı ve geçmişi var. imzalamaya gerek yok. - Kissaki