날짜 및 사용자별로 그룹화된 Git 변경 로그

날짜 및 사용자별로 그룹화된 Git 변경 로그

현재 변경 로그를 생성하는 코드는 다음과 같습니다.

svn2cl --linelen 78 --reparagraph --include-rev --group-by-day

내가 얻을 수 있는 가장 가까운 바닐라 옵션은

git shortlog --format='* [%h] %s' -w78,8,10

svn2cl출력을 최대한 가깝게 시뮬레이션하려면 어떻게 해야 합니까?

출력 예:

2013-02-19  username

        * [r30695] path1: commit message
        * [r30691] path2, path3, path4: looooooooooooooooooooooooooooong
          commit message
        * [r30690] path1, path3: commit message

2013-02-19  other_user
        * ...

2013-02-18  username
        * ...

두 가지 문제가 남아 있습니다.

  • 메시지를 커밋하기 전에 사람이 읽을 수 있는 경로 목록을 포함합니다.
  • 긴 커밋 메시지를 예쁘게 인쇄하기

답변1

또 다른 솔루션올바른 방향이 주어졌습니다. 지금까지의 결과:

#!/usr/bin/env bash
while read -r -u 9 date name
do
    echo "$date  $name"
    echo
    GIT_PAGER=cat git log --no-merges --committer="$name" --since="$date 00:00:00 +0000" --until="$(date --date="$date + 1 day" +%Y-%m-%d) 00:00:00 +0000" --format='        * [%h] %s'
    echo
done 9< <(git log --no-merges --format=$'%cd %cn' --date=short | sort --unique --reverse)

자정 시간이 필요합니다. 어떤 이유에서인지 기본적으로 하루의 시작 시간이 아닌 현재 시간이 설정된 것 같습니다.

두 가지 문제가 남아 있습니다.

  • 메시지를 커밋하기 전에 사람이 읽을 수 있는 경로 목록을 포함합니다.
  • 긴 커밋 메시지를 예쁘게 인쇄하기

예제 출력:

2013-02-19  username

        * [f97bb5f] commit message
        * [f0e419d] looooooooooooooooooooooooooooong commit message
        * [070e50f] commit message

2013-02-19  other_user
        * ...

2013-02-18  username
        * ...

답변2

OS X에서 작동하도록 하기 위해 l0b0의 솔루션을 약간 수정했습니다.

git-grouped-log () {
  while read -r -u 9 since name
  do
    until=$(date -j -v+1d -f '%Y-%m-%d' $since +%Y-%m-%d)

    echo "$since $name"
    echo

    GIT_PAGER=cat git log             \
      --no-merges                     \
      --committer="$name"             \
      --since="$since 00:00:00 +0000" \
      --until="$until 00:00:00 +0000" \
      --format='  * [%h] %s'

    echo
  done 9< <(git log --no-merges --format=$'%cd %cn' --date=short | sort --unique --reverse)
}

또한 임의의 파일에 저장할 수 있기 때문에 함수로 래핑합니다.

관련 정보