git log --since는 어떻게 계산됩니까?


85

몇 개의 커밋 만있는 간단한 테스트 저장소가 있고 날짜 및 시간 필터링 된 로그를보고 싶습니다.

$ git log --author = "automatix"--since = "2013-01-30"--pretty-테스트
커밋 ea0719bef142659fa561c9d040b2120012ed0184
날짜 : 2013 년 1 월 31 일 목요일 02:03:12 +0100

커밋 ab4a8387bc4d9bdb4f67212df77eb1fc3d8b6304
날짜 : 2013 년 1 월 31 일 목요일 01:59:11 +0100

커밋 a0b027beba2cd03571bb9475b9db9542f8efe990
날짜 : 2013 년 1 월 31 일 목요일 01:50:38 +0100

커밋 add77c8fe2ba9254c11b98e14facede3420dc51c
날짜 : 2013 년 1 월 31 일 목요일 01:48:34 +0100

커밋 e6e323c05d37c74fcabeb9186b95c0d49b862e6f
날짜 : 2013 년 1 월 31 일 목요일 01:46:27 +0100

커밋 8c286391e54d3fc1e210950b1320fd6f013a8f84
날짜 : 2013 년 1 월 31 일 목요일 01:41:27 +0100

커밋 9c880595e57f717383796fa2940f41f0f42f7e2a
날짜 : 2013 년 1 월 31 일 목요일 01:38:17 +0100

커밋 a95527f36a533e1ecba1aadceea31a9dcbe1a8db
날짜 : 2013 년 1 월 31 일 목요일 01:30:00 +0100

제 선택된는 커밋 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-테스트 | 화장실
      0 0 0

뭐? 좋습니다. 이것은 since규칙이 시작일 의 커밋을 제외 한다는 것을 의미 합니다. 권리?

그러나 계속합시다.

$ git log --author = "automatix"--since = "2013-01-31 01:30:00"--pretty-테스트
커밋 ea0719bef142659fa561c9d040b2120012ed0184
날짜 : 2013 년 1 월 31 일 목요일 02:03:12 +0100

커밋 ab4a8387bc4d9bdb4f67212df77eb1fc3d8b6304
날짜 : 2013 년 1 월 31 일 목요일 01:59:11 +0100

커밋 a0b027beba2cd03571bb9475b9db9542f8efe990
날짜 : 2013 년 1 월 31 일 목요일 01:50:38 +0100

커밋 add77c8fe2ba9254c11b98e14facede3420dc51c
날짜 : 2013 년 1 월 31 일 목요일 01:48:34 +0100

커밋 e6e323c05d37c74fcabeb9186b95c0d49b862e6f
날짜 : 2013 년 1 월 31 일 목요일 01:46:27 +0100

커밋 8c286391e54d3fc1e210950b1320fd6f013a8f84
날짜 : 2013 년 1 월 31 일 목요일 01:41:27 +0100

커밋 9c880595e57f717383796fa2940f41f0f42f7e2a
날짜 : 2013 년 1 월 31 일 목요일 01:38:17 +0100

커밋 a95527f36a533e1ecba1aadceea31a9dcbe1a8db
날짜 : 2013 년 1 월 31 일 목요일 01:30:00 +0100
$ git log --author = "automatix"--since = "2013-01-31 01:30:00"--format = oneline-테스트 | 화장실
      8 34 498

이제 시작 시간도 작성할 때 시작 시간의 커밋이 포함 됩니다.

논리를 이해하지 못합니다. 아무도 설명 할 수 있습니까? 왜 그렇게 이상하게 작동합니까?

감사


1
정말 흥미 롭습니다. 시간없이 날짜 만 제공하면 그날의 마지막 순간이 기본으로 설정되어 있다면 말이됩니다. 게시 해 주셔서 감사합니다. 매우 흥미로운!
ilan berci 2013 년

1
예, 시간이 없으면 하루의 마지막 초로 기본 설정됩니다. 이상하지만 문제 없습니다. 그러나 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 34 498
automatix

동의하지 않습니다. "… 월요일 이후에 발생했습니다."라는 말은 "월요일 마지막 초 이후에 발생했습니다"를 의미합니다. "월요일"은 24 시간을 의미합니다. "9시 이후에 일어난 일"이라고 말하면 "9시 00 분 이후에 일어난 일"을 의미합니다. "9시"는 시간 범위가 아니라 한 시점입니다. Git의 해석이 가장 의미가 있습니다.
Chronial

2
좋은 지적입니다. 이 논리는 "since"가 아니라 "after"에서만 작동합니다. 그러나 Git에서 "since"anf "after"라는 키워드는 동의어입니다 (언어 적으로 더럽습니다). 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가 작성자의 시간대 또는 커밋 날짜 로 기본 설정되어 일관된 동작을 의미하므로 유용합니다. 다음과 같이 날짜 형식을 명시 적으로 선언합니다.

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.