git commit의 --date 매개 변수의 형식은 무엇입니까?


79

나는 git의 커밋 날짜를 덮어 써야하며 모든 문서는 --date 매개 변수를 가리 키지 만 적절한 형식에 대한 단서없이 남겨 둡니다. 나는 내가 생각할 수있는 모든 순열을 시도했고, 각각에 대해 "치명적 : 유효하지 않은 날짜 형식 :"오류가 발생합니다.


1
그 질문에 대한 일부 답변은 부분적으로 제 답변을 제공합니다. 방금 확인했고 작동합니다. Btw, 당신은 거기에 요일을 넣을 필요가 없습니다 (그것은 고통 스럽습니다).
v010dya 2013

답변:


84

Git 2.6 이상 (2015 년 3 분기)에 새 옵션이 추가되었습니다.

참조 e4f031e 커밋 (2015년 6월 30일을), 및 aa1462c 커밋 , a5481a6 커밋 , b7c1e11 커밋 에 의해 (2015년 6월 25일) 제프 킹 ( peff) .
(Merged by Junio ​​C gitsterHamano -- in commit d939af1 , 03 Aug 2015)

"형식"날짜 모드 도입

이렇게하면 형식이 strftime.
좀 더 융통성있는 것 외에도 주요 이점은 시스템 strftime이 로케일의 선호 형식 (예 : 요일 철자법)에 대해 더 많이 알 수 있다는 것입니다.

--date=format:......시스템에 형식 을 공급합니다 strftime. 시스템 로케일의 선호 형식으로 날짜를 표시하는 데
사용 --date=format:%c합니다. 형식 자리 표시 자의 전체 목록은 설명서를
참조하십시오 strftime.

Davide Cavestro 는 주석 에서 예제를 제안합니다 .

git commit -m "Test" --date=format:relative:5.hours.ago 

원문 답변 (2014 년 중반)

--date(도입 옵션 02b47cd 커밋 git1.7.0을 위해 12 월 2009 년)는보다 동일한 형식을 사용하여 GIT_AUTHOR_DATE시험 날짜 형식으로, 96b2d4f 커밋 :

허용되는 다양한 형식을 볼 수 있습니다.

  • rfc2822 : Mon, 3 Jul 2006 17:18:43 +0200
  • iso8601 : 2006-07-03 17:18:43 +0200
  • 현지: Mon Jul 3 15:18:43 2006
  • 짧게 : 2006-07-03(1.9.1이 아님, 2.3.0에서 작동)
  • 상대 : 커밋 34dc6e7 참조 :

    5.seconds.ago, 
    2.years.3.months.ago, 
    '6am yesterday'
    
  • raw : commit 7dff9b3 (git 1.6.2, 2009 년 3 월) 참조
    내부 원시 git 형식 -epoch + 시간대 이후 초
    (다른 방법으로 입력 : ' date +"%s %z"'형식)

  • 기본: Mon Jul 3 17:18:43 2006 +0200

ADTC의견에서 묻고 대답 합니다 .

2006-07-03 15:18:43을 로컬로 받아들입니까?

예, 작동하며 자동으로 현지 시간대를 사용합니다.
해당 형식으로 나는 그것이 요일 (귀찮게 할 필요가 없습니다 Sun, Mon등).


그것은 동의 하는가 2006-07-03 15:18:43에 대한 지역 ? 또한 상대원시 형식이란 무엇입니까?
ADTC

내 첫 번째 질문에 대답하려면 예, 작동하며 현지 시간대가 자동으로 적용됩니다. 이 형식을 사용하면 요일 (일, 월 등)을 신경 쓰지 않아도됩니다.
ADTC

1
@ADTC 상대 및 원시 날짜 형식에 대한 링크와 참조를 추가했습니다. 더 많은 가시성을 위해 답변에 귀하의 의견을 포함했습니다.
VonC 2014 년

1
@CiroSantilli 확실하지 않습니다 : 그것은 좋은 별도의 질문이 될 수 있습니다. 1.9.4로 테스트하겠습니다.
VonC 2014

1
@CiroSantilli 六四 事件 法轮功 편집 해 주셔서 감사합니다. 2.3.0에서 짧은 형식을 보게되어 기쁩니다.
VonC 2015 년

8

날짜 형식은 Documentation / date-formats.txt ( man git commit) 에 문서화되어 있지 않으며 매우 "인간적으로"구문 분석됩니다.

작동하는 유일한 것은 date.c 에서 소스를 읽고 시도하는 것입니다.

2.3.0에서 VonC에서 언급하지 않은 사항 :

  • 자릿수에 따라 자릿수 만 구문 분석됩니다.

    • 2 자리 숫자 : 19YY, YY> = 73 인 경우, 현재 월, 일 및 시간. 그렇지 않으면 오류 또는 현재 날짜.

    • 4 자리 숫자 : YYYY, YYYY> = 1973, <= 2099

    • > 8 자리에서 약간의 작은 제한 (TODO which?) : UNIX 시간 (1970 년 이후 초)

  • @<digits> +0000: UNIX 시간.

    이것은 UNIX 시간을 직접 입력하는 가장 좋은 방법 인 것 같습니다.

    2 ** 64-2 (TODO why not -1?)는 커밋 오류를 일으키지 않는 최대 값입니다. 스탬프는 C 길이로 저장됩니다.

    git log2^551970 년과 같이 매우 큰 값 ( TODO 어디?)을 git cat-file -p HEAD보여 주지만, 올바른 숫자가 저장되었음을 보여 주므로 날짜 변환의 제한처럼 보입니다.

    보다 큰 경우 2**63 - 1, 가장 큰 양의 부호가있는 long은 GitHub로 푸시하려는 시도가 date causes integer overflow. GitHub에서 해당 날짜의 커밋 (GitHub 는 어떤 이유로 인해 정말 큰 날짜를 표시 할 수 없음 )

    VonC는 이것이 부정적인 날짜를 차단하기 때문에 부끄러운 일이라고 지적했습니다. 1970 이전에 타임 스탬프를 갖도록 git 커밋을 설정할 수 있습니까? 이전 소프트웨어를 Git으로 마이그레이션하는 데 사용할 수 있습니다.

  • tea: 오늘 17시 :-)


날짜에 의존하는 Git repos 이니셔티브 (예 : stackoverflow.com/q/29385441/6309 )의 경우 1970 년 이전 날짜가 좋을 것입니다. stackoverflow.com/a/24977895/6309
VonC

3
@VonC : 멋진 링크입니다. 60 년대 / 70 년대 programmers.stackexchange.com/questions/184695/… 이후 버전 관리가 존재 하고 -3200 년 이후로 텍스트 가 존재한다는 사실이 제 마음을 넘어 가지 않았습니다. hammurabi의 코드를 Git으로 마이그레이션하려면 어떻게해야합니까? :-) (아, 방금 누군가 이미 그렇게했다는 것을 알아 냈습니다 : github.com/elia/hammurabi/blob/master/lib/hammurabi/code.txt ,하지만 타임 스탬프를 잃었습니다)
Ciro Santilli 郝海东 冠状 病 六四 事件法轮功

3

간단한 예 :

GIT_AUTHOR_DATE='2015-04-19 17:18:43 +0200' GIT_COMMITTER_DATE='2015-04-19 17:18:43 +0200' git commit -m 'Commit message'

환경 변수를 사용하는 것이 커밋 날짜를 설정하는 유일한 방법 인 것 같습니다. 그것에 대한 인수 옵션이 없습니다.
Jarl

1

아래의 축약 된 양식은 모두 작동합니다.

  1. <month>/<day>
  2. <month>-<day>
  3. <day>.<month>

모호함이없는 경우, 즉 <day>보다 큼 12, 순서는 <month> <day>중요하지 않으며 구분 기호는 ' /', ' -'또는 ' .' 중 하나가 될 수 있습니다 .

그렇지 않으면 ' .'를 구분 기호로 사용 <day>.<month>하고 ' /'또는 ' -'를 사용하십시오 <month>-<day>.

따라서 " 1.7"는 "7 월 1 일"로 취급되고 " 1/7"는 "1 월 7 일"로 취급됩니다.

v1.3.0의 관련 커밋을 참조하십시오 .

구분 기호가 '.'이면 dd.mm.yyyy보다 선호합니다.
mm.dd.yyyy; 그렇지 않으면 mm / dd / yy [yy]가 우선합니다.
dd / mm / yy [yy].

이는 날짜 입력을받는 다른 명령에도 적용됩니다. 예 : 2 월 4 일 이후의 로그 표시 :

git log --since 2/4
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.