Git log --since nasıl sayılır?


85

Sadece birkaç işlem içeren basit bir test havuzum var ve tarih ve saat filtreli günlüğü görmek istiyorum:

$ git log --author = "automatix" --since = "2013-01-30" --pretty - test
işlemek ea0719bef142659fa561c9d040b2120012ed0184
Tarih: 31 Ocak Per 02:03:12 2013 +0100

ab4a8387bc4d9bdb4f67212df77eb1fc3d8b6304 işlemek
Tarih: 31 Ocak Per 01:59:11 2013 +0100

taahhüt et a0b027beba2cd03571bb9475b9db9542f8efe990
Tarih: 31 Ocak Per 01:50:38 2013 +0100

add77c8fe2ba9254c11b98e14facede3420dc51c ekle
Tarih: 31 Ocak Per 01:48:34 2013 +0100

e6e323c05d37c74fcabeb9186b95c0d49b862e6f işlemek
Tarih: 31 Ocak Per 01:46:27 2013 +0100

8c286391e54d3fc1e210950b1320fd6f013a8f84 işlemek
Tarih: 31 Ocak Per 01:41:27 2013 +0100

işlemek 9c880595e57f717383796fa2940f41f0f42f7e2a
Tarih: 31 Ocak Per 01:38:17 2013 +0100

işlemek a95527f36a533e1ecba1aadceea31a9dcbe1a8db
Tarih: 31 Ocak Per 01:30:00 2013 +0100

İlk seçilen kaydetme a95527f36a533e1ecba1aadceea31a9dcbe1a8dbkaynağı 2013-01-30 01:30:00. 8 kaydetme seçildi:

$ git log --author = "automatix" --since = "2013-01-30" --format = oneline - test | tuvalet
      8 34 498

TAMAM. Şimdi şu zamandan beri seçiyorum 2013-01-31:

$ git log --author = "automatix" --since = "2013-01-31" --format = oneline - test | tuvalet
      0 0 0

Ne? Tamam, bu, sincekuralın başlangıç ​​tarihinin taahhütlerini hariç tuttuğu anlamına gelmelidir . Sağ?

Ama devam edelim:

$ git log --author = "automatix" --since = "2013-01-31 01:30:00" --pretty - test
işlemek ea0719bef142659fa561c9d040b2120012ed0184
Tarih: 31 Ocak Per 02:03:12 2013 +0100

ab4a8387bc4d9bdb4f67212df77eb1fc3d8b6304 işlemek
Tarih: 31 Ocak Per 01:59:11 2013 +0100

taahhüt et a0b027beba2cd03571bb9475b9db9542f8efe990
Tarih: 31 Ocak Per 01:50:38 2013 +0100

add77c8fe2ba9254c11b98e14facede3420dc51c ekle
Tarih: 31 Ocak Per 01:48:34 2013 +0100

e6e323c05d37c74fcabeb9186b95c0d49b862e6f işlemek
Tarih: 31 Ocak Per 01:46:27 2013 +0100

8c286391e54d3fc1e210950b1320fd6f013a8f84 işlemek
Tarih: 31 Ocak Per 01:41:27 2013 +0100

işlemek 9c880595e57f717383796fa2940f41f0f42f7e2a
Tarih: 31 Ocak Per 01:38:17 2013 +0100

işlemek a95527f36a533e1ecba1aadceea31a9dcbe1a8db
Tarih: 31 Ocak Per 01:30:00 2013 +0100
$ git log --author = "automatix" --since = "2013-01-31 01:30:00" --format = oneline - test | tuvalet
      8 34 498

Şimdi, ben de başlangıç ​​zamanını yazarken, başlangıç ​​zamanının taahhütleri de dahil edildi .

Mantığı anlamıyorum. Biri neden bu kadar garip çalıştığını açıklayabilir mi?

Teşekkürler


1
gerçekten çok ilginç .. Zaman olmadan sadece bir tarih verdiğinizde, varsayılan olarak günün son saniyesine dönmesi bana mantıklı geliyor .. ama bu sadece benim gözümden kaçırdığım bir şey. Bunu gönderdiğiniz için teşekkürler. Çok ilginç!
ilan berci

1
Evet, öyle görünüyor ki, bir saat olmadan varsayılan olarak günün son saniyesine dönüyor. Stange, ama sorun değil. Ama saniyeler olmadan zaman sağlandığında Git aynı şeyi yapmalıdır. Yani, git log --author="automatix" --since="2013-01-31 01:30" --pretty -- test should content 7 commit'in sonucu . Ama içeriği 8. git log --author="automatix" --since="2013-01-31 01:30" --format=oneline -- test | wc=> 8 34498
automatix

Katılmıyorum. “… Pazartesiden sonra oldu” dediğimde, “Pazartesi'nin son saniyesinden sonra oldu” demek istiyorum - “Pazartesi” 24 saatlik bir süreyi ifade ediyor. “Saat 9'dan sonra oldu” derken, “9: 00: 00.0000'dan sonra oldu” - “saat 9” bir zaman aralığı değil, zamanın bir noktasıdır. Git'in yorumu en mantıklı olanıdır.
Chronial

2
Bu iyi bir nokta. Bu mantığın sadece "sonra" ile çalıştığını söyleyebilirim - "beri" ile değil. Ama Git'te "anf" after "den beri anahtar sözcükler eşanlamlıdır (dilsel olarak kirli buluyorum). git-scm.com/book/en/…
automatix

Yanıtlar:


138

Benim yaptığım gibi buraya gelen başka birine yardımcı olması durumunda, biraz araştırma yaptıktan sonra ISO8601 formatını kullanmanın da işe yaradığını öğrendim :

git log --since="2014-02-12T16:36:00-07:00"

Bu size saniyeye kadar hassasiyet verecektir. Not: Ayrıca şunları da kullanabilirsiniz:

git log --after="2014-02-12T16:36:00-07:00"
git log --before="2014-02-12T16:36:00-07:00"
git log --since="1 month ago"
git log --since="2 weeks 3 days 2 hours 30 minutes 59 seconds ago"

vb.

Elbette bu, "neden bu kadar tuhaf çalıştığını açıklamıyor". Ancak benim için kesinlikle sorunu çözdü.


DÜZENLE:

Biraz daha araştırmadan sonra, "neden bu kadar tuhaf çalıştığını"
öğrendim : Bir tarih formatı belirtmediğinizde git log varsayılan olarak yazarın saat dilimi veya taahhüt tarihleridir , yani tutarlı davranış için, yararlıdır tarih formatınızı aşağıdaki gibi açıkça beyan etmek için:

git log --date=local

Son olarak, bir saat belirtmediğinizde, komutu çalıştırdığınızda varsayılan olarak yerel saatinize ayarlanır.

Uzun lafın kısası, spesifik olmak sorunu çözmelidir:

git log --date=local --after="2014-02-12T16:36:00-07:00"

Ayrıca, aşağıdaki komutla varsayılan tarih biçimini kalıcı olarak ayarlayabilirsiniz:

git config log.date local

şu değerlerden herhangi birini kullanabilirsiniz: (relative|local|default|iso|rfc|short|raw)

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.