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

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



답변

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등).


답변

날짜 형식은 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_AUTHOR_DATE='2015-04-19 17:18:43 +0200' GIT_COMMITTER_DATE='2015-04-19 17:18:43 +0200' git commit -m 'Commit message'


답변

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

  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


답변