2017-01-07 1 views
0

올해의 시작 이후로 내 커밋의 목록을 a repository에 보내고 싶었습니다. 나는 명백한 명령을 시도하지만, 그들 중 포함되지 않습니다, 나는 나에게 그들 중 일부 도착하는 --since=2016-12-19를 사용할 필요가 이상하게git log --since가 예상 한 커밋을 포함하지 않는 이유는 무엇입니까?

 
$ git log --pretty='format:%h %ae %cI %s' [email protected] --since=2017-01-01 
$ 

을 :

 
$ git log --pretty='format:%h %ae %cI %s' [email protected] --since=2016-12-20 
$ git log --pretty='format:%h %ae %cI %s' [email protected] --since=2016-12-19 
61569b5 [email protected] 2017-01-02T16:25:22+08:00 Bug 1324624 - Tweak stylo crashtest assertion annotations a bit more. 
7fca5ff [email protected] 2016-12-29T16:32:01+08:00 Bug 1323892 - Followup to disable one more crashtest under stylo. 
cd875e7 [email protected] 2016-12-28T17:50:44+08:00 Bug 1326023 - Make Element::GetBindingURL return a strong reference. r=smaug 
3c057d1 [email protected] 2017-01-02T15:44:23+08:00 Bug 1323717 - Re-enable 1290994-4.html. r=manishearth 
7a45228 [email protected] 2016-12-28T17:50:44+08:00 Bug 1326023 - Make Element::GetBindingURL return a strong reference. r=smaug 
171e45e [email protected] 2017-01-03T18:35:15+08:00 Bug 1328223 - stylo: Ignore invalid URLs from @import rules. r=emilio 
$ 

을하지만 그것은 모두가 아니다 그 중 :

$ git log --pretty='format:%h %ae %cI %s' [email protected] | grep 2017- | wc -l 
19

여기에 무슨 일이 일어나고있는가? --since은 주어진 날짜 이전의 출력에서 ​​커밋을 제거하는 것 외에 다른 작업을 수행합니까?

답변

1

더 좋든 나쁘 든 (나, 나는 "나쁜"캠프에있다.), git는 당신이 날짜를 지정할 때의 현재 시간을 기본으로한다. 시도해보십시오. --since='midnight 2016-12-20'

... 좋습니다. 아직 코드를 해독하지 않은,하지만이 그것을 위해 지독하게 좋아 보인다 : 커밋 뒤에있는

~/src/gecko-dev$ lgdo @ --pretty=%h%x09%aI%x09%cI%x09%ae 
* 1e82e8d0792b  2017-01-06T10:59:19-05:00  2017-01-06T10:59:19-05:00  [email protected] 
|\ 
| * cddd3c28b212  2017-01-06T22:10:08+11:00  2017-01-06T22:10:08+11:00  [email protected] 
| * c337ff9019fb  2016-11-21T15:58:37-08:00  2016-11-21T15:58:37-08:00  [email protected] 
| * aa46f91d69e7  2017-01-05T17:14:46+01:00  2017-01-05T17:14:46+01:00  [email protected] 
| * d1ef4e265960  2017-01-06T21:12:08+11:00  2017-01-06T21:12:08+11:00  [email protected] 
| * 76040295f609  2017-01-06T21:12:08+11:00  2017-01-06T21:12:08+11:00  [email protected] 
| * 1b2b0886c923  2017-01-06T21:12:08+11:00  2017-01-06T21:12:08+11:00  [email protected] 
| * 41782ed8bfb7  2017-01-06T15:30:31+08:00  2017-01-06T15:30:31+08:00  [email protected] 
| * 318a182e13bb  2017-01-06T15:29:47+08:00  2017-01-06T15:29:47+08:00  [email protected] 
| * b54b74578c69  2017-01-06T15:21:19+08:00  2017-01-06T15:21:19+08:00  [email protected] 
| * 076ab8862963  2017-01-06T15:05:24+08:00  2017-01-06T15:05:24+08:00  [email protected] 
| * 13ce7a2e81b0  2017-01-06T15:05:24+08:00  2017-01-06T15:05:24+08:00  [email protected] 

공지 사항 c337ff9을 커밋 2016년 11월 21일 일자. 나는 어딘가에 휴리스틱이 있다고 내기하고있다. 그것은 컷오프가 끝나기 1 개월 전에 커밋을 만나면 멈춘다. 가치있는 지적 더

+0

'--since ='a midnight 2017-01-01 ''을 사용하면 여전히 올해의 커밋이 표시되지 않습니다. – heycam

+0

문서가 어떤 타임 스탬프가 선택되었는지 말하지 않는 것을 볼 수 있습니다. – jthill

+0

작성자와 커밋 날짜의 차이점을 알려 주셔서 감사합니다. 나는'git log --pretty = '형식을 사용했습니다 : % h % ae % aI % s'[email protected] | grep 2017- | wc -l'이고 2017 년에 인쇄 된 날짜로 19 커밋을 얻습니다. – heycam

0

몇 가지 참고 사항 :

  1. 망할 놈의 (적어도 현재 거의-2.12 원 기준) 최소 및 최대 연령 매개 변수, 커밋 날짜가 아닌 저자 날짜를 사용합니다. 대략적인 파서로부터의 출력은 revs->max_age (그렇지 않으면 -1)으로 변합니다. --since을 사용할 때입니다. 이것은 실제로 문서화되어야하며, 이전 버전의 Git 버전도 똑같은 일을하는 것은 확실하지 않습니다.

  2. revs->limited이 설정되면 함수 limit_revs이 호출되어 부모로부터 자식에게 자식 플래그 UNINTERESTING을 전달합니다. UNINTERESTING 플래그는 한 커밋이 max_age 설정을 지나면 설정됩니다. 이것은 나중에 커미터 데이트를하여 커밋의 모든 아이들을 제거 할 것입니다. 그러나 여기서는 revs->limited을 실제로 설정하지 않아야합니다 (예 : --ancestry-path--simplify-by-decoration 포함).

  3. 내부 기능 get_revision_1does something similar if revs->limited is not set, except that it doesn't even add the parent commits.

비록 날짜는 일반적으로 비 감소 될 것이다 커밋, 그것은 잘못된에 이후 하나가 항상 주어진 커밋도 병합 커밋을 통해의 특정 커밋 날짜 수, 그들은 비 감소하고 가정 보인다 예를 들어 GIT_COMMITTER_DATE 환경 변수 또는 악의가없는 경우에도 컴퓨터 시계가 항상 올바른 것은 아닙니다. 컴퓨터가 1973 년으로 설정된 어떤 이유로 인해 다른 사람의 작업을 병합하면 다른 사람의 작업이 과거에 수행되지 않습니다.

+0

이것이 꽤 의도되지 않은 행동이라고 생각합니다. 2008 년 Linus가 ("grep = bad.commit.dates") 결론을 내 렸습니다. "가끔씩 발생하는 사고가 깔끔하게 처리됩니다"라고 결론지었습니다. :-피 – jthill