git log - นับอย่างไร?


85

ฉันมีที่เก็บการทดสอบอย่างง่ายพร้อมด้วยการคอมมิทหลายรายการและต้องการดูบันทึกการกรองวันที่และเวลา:

บันทึก $ git --author = "automatix" --since = "2013-01-30" - สวย - ทดสอบ
กระทำ ea0719bef142659fa561c9d040b2120012ed0184
วันที่: พฤ 31 ม.ค. 02:03:12 น. 2556 +0100

กระทำ ab4a8387bc4d9bdb4f67212df77eb1fc3d8b6304
วันที่: พฤ 31 ม.ค. 01:59:11 น. 2556 +0100

กระทำ a0b027beba2cd03571bb9475b9db9542f8efe990
วันที่: พฤ 31 ม.ค. 01:50:38 น. 2556 +0100

กระทำ add77c8fe2ba9254c11b98e14facede3420dc51c
วันที่: พฤ 31 ม.ค. 01:48:34 น. 2556 +0100

กระทำ e6e323c05d37c74fcabeb9186b95c0d49b862e6f
วันที่: พฤ 31 ม.ค. 01:46:27 น. 2556 +0100

กระทำ 8c286391e54d3fc1e210950b1320fd6f013a8f84
วันที่: Thu Jan 31 01:41:27 2556 +0100

กระทำ 9c880595e57f717383796fa2940f41f0f42f7e2a
วันที่: พฤ 31 ม.ค. 01:38:17 น. 2556 +0100

กระทำ a95527f36a533e1ecba1aadceea31a9dcbe1a8db
วันที่: พฤ 31 ม.ค. 01:30:00 2556 +0100

ที่เลือกแรกที่กระทำคือจากa95527f36a533e1ecba1aadceea31a9dcbe1a8db 2013-01-30 01:30:008 คอมมิตถูกเลือก:

$ git log --author = "automatix" --since = "2013-01-30" --format = oneline - test | ห้องน้ำ
      8 34498

ตกลง. ตอนนี้ฉันเลือกตั้งแต่2013-01-31:

$ git log --author = "automatix" --since = "2013-01-31" --format = oneline - test | ห้องน้ำ
      0 0 0

อะไร? โอเคนั่นควรหมายความว่าsinceกฎไม่รวมการกระทำของวันที่เริ่มต้น ขวา?

แต่ไปกันเลย:

บันทึก $ git --author = "automatix" --since = "2013-01-31 01:30:00" - สวย - ทดสอบ
กระทำ ea0719bef142659fa561c9d040b2120012ed0184
วันที่: พฤ 31 ม.ค. 02:03:12 น. 2556 +0100

กระทำ ab4a8387bc4d9bdb4f67212df77eb1fc3d8b6304
วันที่: พฤ 31 ม.ค. 01:59:11 น. 2556 +0100

กระทำ a0b027beba2cd03571bb9475b9db9542f8efe990
วันที่: พฤ 31 ม.ค. 01:50:38 น. 2556 +0100

กระทำ add77c8fe2ba9254c11b98e14facede3420dc51c
วันที่: พฤ 31 ม.ค. 01:48:34 น. 2556 +0100

กระทำ e6e323c05d37c74fcabeb9186b95c0d49b862e6f
วันที่: พฤ 31 ม.ค. 01:46:27 น. 2556 +0100

กระทำ 8c286391e54d3fc1e210950b1320fd6f013a8f84
วันที่: Thu Jan 31 01:41:27 2556 +0100

กระทำ 9c880595e57f717383796fa2940f41f0f42f7e2a
วันที่: พฤ 31 ม.ค. 01:38:17 น. 2556 +0100

กระทำ a95527f36a533e1ecba1aadceea31a9dcbe1a8db
วันที่: พฤ 31 ม.ค. 01:30:00 2556 +0100
$ git log --author = "automatix" --since = "2013-01-31 01:30:00" --format = oneline - test | ห้องน้ำ
      8 34498

ตอนนี้เมื่อฉันเขียนเวลาเริ่มต้นด้วยเช่นกันค่าคอมมิตของเวลาเริ่มต้นจะรวมอยู่ด้วย

ฉันไม่เข้าใจตรรกะ มีใครอธิบายได้ไหมว่าทำไมมันถึงดูแปลก ๆ

ขอบคุณ


1
น่าสนใจมากจริงๆ .. มันสมเหตุสมผลสำหรับฉันถ้าเมื่อคุณระบุวันที่โดยไม่มีเวลาจะมีค่าเริ่มต้นเป็นวินาทีสุดท้ายของวัน .. แต่นั่นเป็นเพียงสิ่งที่ฉันกำลังแทง ขอบคุณสำหรับการโพสต์สิ่งนี้ น่าสนใจมาก!
ilan berci

1
ใช่ดูเหมือนว่าจะไม่มีเวลาเป็นค่าเริ่มต้นของวินาทีสุดท้ายของวัน Stange แต่ไม่มีปัญหา แต่จากนั้น Git ก็ควรจะทำเช่นเดียวกันเมื่อมีการระบุเวลาโดยไม่มีวินาที ดังนั้นผลลัพธ์ของ git log --author="automatix" --since="2013-01-31 01:30" --pretty -- test ควรเนื้อหา 7 คอมมิต แต่เนื้อหา 8. git log --author="automatix" --since="2013-01-31 01:30" --format=oneline -- test | wc=> 8 34498
อัตโนมัติ

ฉันไม่เห็นด้วย. เมื่อฉันพูดว่า“ …เกิดขึ้นหลังจากวันจันทร์” ฉันหมายถึง“ เกิดขึ้นหลังจากวินาทีสุดท้ายของวันจันทร์” -“ วันจันทร์” หมายถึงช่วงเวลา 24 ชั่วโมง ในขณะที่ฉันพูดว่า“ เกิดขึ้นหลัง 9 โมง” ฉันหมายถึง“ เกิดขึ้นหลัง 9: 00: 00.0000 น.” -“ 9 นาฬิกา” คือจุดเดียวไม่ใช่ช่วงเวลา การตีความของ Git เหมาะสมที่สุด
โครเนียล

2
มันเป็นจุดที่ดี ฉันจะบอกว่าตรรกะนี้ใช้ได้กับ "after" เท่านั้นไม่ใช่กับ "since" แต่ใน Git คีย์เวิร์ด "since" anf "after" เป็นคำพ้องความหมาย (ฉันคิดว่ามันสกปรกทางภาษา) git-scm.com/book/en/…
automatix

คำตอบ:


139

ในกรณีที่มันช่วยคนอื่นที่มาที่นี่เหมือนฉันหลังจากการค้นคว้าเล็กน้อยฉันพบว่าการใช้รูปแบบ ISO8601ก็ใช้ได้เช่นกัน:

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

สิ่งนี้จะทำให้คุณแม่นยำลงไปถึงวินาที หมายเหตุ: คุณยังสามารถใช้:

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"

เป็นต้น

แน่นอนว่านี่ไม่ได้ "อธิบายว่าทำไมมันถึงได้ผลแปลก ๆ " อย่างไรก็ตามมันแก้ปัญหาให้ฉันได้อย่างแน่นอน


แก้ไข:

หลังจากค้นคว้าเพิ่มเติมเล็กน้อยฉันพบว่า "ทำไมมันถึงทำงานได้แปลก ๆ ":
ปรากฎว่าเมื่อคุณไม่ระบุรูปแบบวันที่บันทึก git จะตั้งค่าเริ่มต้นเป็นเขตเวลาของผู้เขียนหรือวันที่ที่กำหนดซึ่งหมายถึงพฤติกรรมที่สอดคล้องกันมันมีประโยชน์ เพื่อประกาศรูปแบบวันที่ของคุณอย่างชัดเจนด้วยสิ่งต่อไปนี้:

git log --date=local

สุดท้ายนี้เมื่อคุณไม่ระบุเวลาค่าเริ่มต้นจะเป็นเวลาท้องถิ่นของคุณเมื่อคุณรันคำสั่ง

เรื่องสั้นขนาดยาวเฉพาะเจาะจงควรแก้ปัญหา:

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

นอกจากนี้คุณสามารถตั้งค่ารูปแบบวันที่เริ่มต้นอย่างถาวรด้วยคำสั่งต่อไปนี้:

git config log.date local

คุณสามารถใช้ค่าใดค่าหนึ่งต่อไปนี้: (relative|local|default|iso|rfc|short|raw)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.