Git log --since की गिनती कैसे होती है?


85

मेरे पास बस कई कमिट्स के साथ एक सरल परीक्षण भंडार है और दिनांक और समय फ़िल्टर्ड लॉग देखना चाहते हैं:

$ git log --author = "automatix" --since = "2013-01-30" --pretty - test
प्रतिबद्ध ea0719bef142659fa561c9d040b2120012ed0184
दिनांक: थु जन ३१ ०२:०३:१२ २०१३ +०१००

प्रतिबद्ध ab4a8387bc4d9bdb4f67212df77eb1fc3d8b6304
दिनांक: थू जन ३१ ०१:०१:११ २०१३ +०१००

a0b027beba2cd03571bb9475b9db9542f8efe990 प्रतिबद्ध करें
दिनांक: थु जन ३१ 01:50:38 2013 +0100

प्रतिबद्ध add77c8fe2ba9254c11b98e14facede3420dc51c
दिनांक: थु जन ३१ 01:48:34 2013 +0100

प्रतिबद्ध e6e323c05d37c74fcabeb9186b95c0d49b862e6f
दिनांक: थु जन ३१ 01:46:27 2013 +0100

प्रतिबद्ध 8c286391e54d3fc1e210950b1320fd6f013a8f84
दिनांक: थू जन ३१ 01:41:27 2013 +0100

प्रतिबद्ध 9c880595e57f71738379696292940f41f0f42f7e2a
दिनांक: थु जन ३१ 01:38:17 2013 +0100

a95527f36a533e1ecba1aadceea31a9dcbe1a8db
दिनांक: थू जन ३१ ०१:३०:००० २०१३ +०१००

पहली चयनित कमेटी a95527f36a533e1ecba1aadceea31a9dcbe1a8dbसे है 2013-01-30 01:30:00। 8 आवागमन चयनित हैं:

$ git log --author = "automatix" --since = "2013-01-30" --format = oneline - परीक्षण | स्वागत
      8 34 498

ठीक है। अब मैं सेलेक्ट करता हूँ 2013-01-31:

$ git log --author = "automatix" --since = "2013-01-31" --format = oneline - परीक्षण | स्वागत
      ० ० ०

क्या? ठीक है, इसका मतलब यह होना चाहिए कि sinceनियम स्टार्ट के कमिट को बाहर करता है। सही?

लेकिन चलो चलें:

$ git log --author = "automatix" - since = "2013-01-31 01:30:00" - व्याख्या - उत्तर
प्रतिबद्ध ea0719bef142659fa561c9d040b2120012ed0184
दिनांक: थु जन ३१ ०२:०३:१२ २०१३ +०१००

प्रतिबद्ध ab4a8387bc4d9bdb4f67212df77eb1fc3d8b6304
दिनांक: थू जन ३१ ०१:०१:११ २०१३ +०१००

a0b027beba2cd03571bb9475b9db9542f8efe990 प्रतिबद्ध करें
दिनांक: थु जन ३१ 01:50:38 2013 +0100

प्रतिबद्ध add77c8fe2ba9254c11b98e14facede3420dc51c
दिनांक: थु जन ३१ 01:48:34 2013 +0100

प्रतिबद्ध e6e323c05d37c74fcabeb9186b95c0d49b862e6f
दिनांक: थु जन ३१ 01:46:27 2013 +0100

प्रतिबद्ध 8c286391e54d3fc1e210950b1320fd6f013a8f84
दिनांक: थू जन ३१ 01:41:27 2013 +0100

प्रतिबद्ध 9c880595e57f71738379696292940f41f0f42f7e2a
दिनांक: थु जन ३१ 01:38:17 2013 +0100

a95527f36a533e1ecba1aadceea31a9dcbe1a8db
दिनांक: थू जन ३१ ०१:३०:००० २०१३ +०१००
$ git log --author = "automatix" - since = "2013-01-31 01:30:00" --format = oneline - परीक्षण | स्वागत
      8 34 498

अब, जब मैं प्रारंभ के रूप में अच्छी तरह से लिख रहा हूँ, तो प्रारंभ के समय शामिल हैं

मैं तर्क नहीं समझता। क्या कोई समझा सकता है, यह इतना अजीब क्यों काम करता है?

धन्यवाद


1
वास्तव में बहुत दिलचस्प है .. यह मेरे लिए समझ में आता है अगर आप बिना समय दिए बस एक तारीख प्रदान करते हैं, तो यह दिन के आखिरी सेकंड में चूक जाता है .. लेकिन यह सिर्फ एक चीज है जो मैं एक छुरा ले जा रहा हूं। इसे पोस्ट करने के लिए धन्यवाद। बहुत ही रोचक!
इलान बेरी

1
हां, ऐसा लगता है, कि यह एक समय के बिना दिन के आखिरी सेकंड में चूक जाता है। निकला हुआ, लेकिन कोई समस्या नहीं। लेकिन इसके बाद गिट को एक ही करना चाहिए, जब सेकंड के बिना समय प्रदान किया जाता है। तो 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 34 498
ऑटोमैटिक्स

मैं असहमत हूं। जब मैं कहता हूं "... सोमवार के बाद हुआ", मेरा मतलब है "सोमवार के अंतिम दूसरे के बाद हुआ" - "सोमवार" 24 घंटों की अवधि के लिए है। जब मैं कहता हूं कि "9 बजे के बाद हुआ", मेरा मतलब है कि "9: 00: 00.0000 के बाद हुआ" - "9 बजे" एक समय में एक बिंदु है, एक समय अवधि नहीं। गिट की व्याख्या सबसे अधिक समझ में आती है।
क्रोनिकल

2
अच्छी बात है। मैं कहूंगा, यह तर्क केवल "बाद" के साथ काम करता है - "तब से" नहीं। लेकिन Git के बाद से "af" के कीवर्ड पर्यायवाची हैं (मुझे यह भाषाई रूप से गंदा लगता है)। git-scm.com/book/en/…
automatix

जवाबों:


135

मामले में यह किसी और की मदद करता है जो यहाँ की भूमि की तरह है जैसे मैंने किया था, थोड़ा शोध के बाद मुझे पता चला कि 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 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)

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.