Git은 분산 된 버전 제어 시스템이므로 "푸시 날짜"라는 의미를 신중하게 정의해야합니다. 예를 들어 사용자 A가 사용자 B의 저장소에 일부 커밋을 푸시한다고 가정합니다. 나중에 사용자 B가 동일한 커밋을 세 번째 저장소로 푸시합니다. 어느 날짜에 관심이 있습니까?
나는 당신이 공유 리포지토리를 가지고 있고 그 공유 리포지토리의 사용자가 무언가가 언제 리포지토리에 게시되었는지 확인할 수 있기를 원한다고 추측하고 있습니다. 사실이라면 공유 저장소에서 해당 정보를 수집해야합니다.
나쁜 소식
불행히도 커밋 메시지에 날짜를 추가하는 방법은 없습니다. 그러면 커밋 ID (내용의 SHA1 해시)가 변경되어 모든 종류의 문제가 발생합니다.
좋은 뉴스
다행히 Git에는 notes 라는 (상대적으로 새로운) 기능이 있습니다 . 이 기능을 사용하면 git log
표시 할 수 있는 커밋에 임의의 텍스트를 첨부 할 수 있습니다. 메모를 편집하고 다른 사람과 공유 할 수 있습니다.
노트 기능을 사용하여 "[날짜]에이 커밋을 받았습니다"메시지를 공유 저장소에서 수신 할 때 각 커밋에 첨부 할 수 있습니다.
자세한 내용은를 참조 git help notes
하십시오.
날짜를 기록하는 방법
내가 권장하는 접근 방식은 다음과 같습니다.
post-receive
공유 리포지토리 의 후크를 수정하여 업데이트 된 각 참조에 대해 새로 도달 할 수있는 커밋을 각각 이동합니다.
각 커밋에 대해 "[repository_url]의 [user]가이 커밋을 [date]의 [ref]에 추가했습니다."와 같은 내용을 커밋 메모에 추가합니다.
refs/notes/received-on
기본값 대신 이 용도 (예 :) 전용 메모 참조를 사용할 수 있습니다 refs/notes/commits
. 이렇게하면 다른 용도로 만든 메모와의 충돌을 방지 할 수 있습니다.
receive
노트 참조에 대한 업데이트를 거부하도록 후크를 수정합니다 (사용자가 실수로 또는 의도적으로 노트를 엉망으로 만들지 못하도록 방지).
모든 사용자에게 작업 트리 내에서 다음 명령을 실행하도록 지시하십시오.
# Fetch all notes from the shared repository.
# Assumes the shared repository remote is named 'origin'.
git config --add remote.origin.fetch '+refs/notes/*:refs/remote-notes/origin/*'
# Show all notes from the shared repository when running 'git log'
git config --add notes.displayRef 'refs/remote-notes/origin/*'
이 단계는 Git이 기본적으로 업스트림 리포지토리의 비 분기, 비 태그 참조를 무시하기 때문에 필요합니다.
위의 내용은 참조가 고급 일뿐 삭제되거나 강제 업데이트되지 않는다고 가정합니다. 당신은 아마 가지고 싶은 것 post-receive
또한 APPEND 이러한 경우를 처리하기 위해 노트 "[날짜]에 제거"후크를.
git reflog --date=local origin/master
(참고origin/
) 해야한다는 것을 추가하고 싶습니다 . 그렇지 않으면 커밋, 체크 아웃, 풀만 목록에 포함되었습니다 (유용함). 실제로 @JonathanDay의 답변 으로 지적되었습니다 .