git을 사용하여 변경 로그를 관리하는 좋은 방법? 자체 PHP 사이트

나는 잠시 동안 Git을 사용 해 왔으며 최근에 변경 사항을보다 쉽게 ​​추적하고 각 클라이언트가 실행중인 버전을 볼 수 있도록 릴리스에 태그를 지정하기 위해 최근에 사용하기 시작했습니다 (불행히도 현재 코드가 요구합니다) 각 클라이언트에는 자체 PHP 사이트 사본이 있습니다.이를 변경하고 있지만 느리게 진행됩니다).

어쨌든, 우리는 약간의 추진력을 구축하기 시작했습니다. 저는 지난 릴리스 이후 변경된 사항을 사람들에게 보여줄 수 있다는 것이 정말 좋을 것이라고 생각했습니다. 문제는 변경 방법을 잘 모르기 때문에 변경 로그를 유지하지 않았다는 것입니다. 이 특정 시간 동안 로그를 살펴보고 수동으로 로그를 만들 수는 있지만 매우 빨리 지칠 것입니다.

나는 “git changelog”와 “git manage changelog”인터넷 검색을 시도했지만 실제로 코드 변경 작업 과정과 변경 로그와 일치하는 방법에 대해 이야기 한 것을 찾지 못했습니다. 우리는 현재 Rein Henrichs의 개발 워크 플로를 따르고 있으며 그와 함께하는 것을 좋아합니다.

내가 놓친 표준 접근법이 있습니까, 아니면 모든 사람이 자신의 일을하는 영역입니까?

귀하의 의견 / 답변에 감사드립니다!



답변

이것은 약 3-4 년 전이지만 미래의 검색자를 위해 다음을 사용하여 멋진 로그를 생성 할 수 있습니다.

git log --oneline --decorate

또는 더 예쁘기를 원한다면 (터미널 색상으로) :

git log --oneline --decorate --color

그 출력을 ChangeLog로 파이프하는 것은 현재 모든 프로젝트에서 사용하는 것입니다.


답변

git log의 풍미를 사용하여 도움을 줄 수 있습니다.

git log --pretty=%s                 # only print the subject

브랜치의 이름을 잘 지정하여 마스터와의 병합이 “병합 브랜치 기능 -foobar”와 같이 표시되면 병합 한 모든 커밋이 아니라 메시지 만 표시하여 사물을 줄일 수 있습니다. 특색:

git log --pretty=%s --first-parent  # only follow first parent of merges

“병합 된 분기”비트를 제거하고 서식을 정규화하는 등의 작업을 수행 할 수있는 자체 스크립트를 사용하여이 기능을 보강 할 수 있습니다. 어떤 시점에서는 물론 직접 작성해야합니다.

그런 다음 버전 당 한 번 변경 로그에 대한 새 섹션을 만들 수 있습니다.

git log [opts] vX.X.X..vX.X.Y | helper-script > changelogs/X.X.Y

버전 릴리스 커밋에서 커밋하십시오.

문제가 커밋 대상이 변경 로그에 넣기를 원하는 것과 다른 것이 아니라면 두 가지 옵션이 있습니다. 수동으로 모든 것을 수동으로 수행하십시오 (그리고 캐치를 재생하는 대신 더 정기적으로 유지하십시오) 커밋 메시지 스타일을 수정하십시오. 주제가 당신을 위해 그것을하지 않을 경우 한 가지 옵션은 커밋 메시지의 본문에 “change : added feature foobar”와 같은 줄을 배치하여 나중에 git log --pretty=%B | grep ^change:그 슈퍼 만 잡는 것과 같은 일 을 할 수 있도록하는 것입니다 -메시지의 중요한 비트.

나는 그 자식보다 얼마나 많은 것이 변경 로그를 만드는 데 실제로 도움이 될 수 있는지 확실하지 않습니다. “관리”의 의미를 잘못 해석했을 수도 있습니다.


답변

면책 조항 : 나는 gitchangelog 의 저자이며 다음에서 이야기 할 것입니다.

TL; DR : gitchangelog 자체의 변경 로그 또는 이전을 생성 한 ASCII 출력 을 점검 할 수 있습니다 .

git history에서 변경 로그를 생성하려면 다음을 고려해야합니다.

  • 출력 형식 . (순수한 사용자 정의 ASCII, 데비안 변경 로그 유형, Markdow, ReST …)
  • 일부 커밋 필터링 (아마도 변경 내용에 오타 또는 외형 변경 사항이 모두 표시되는 것을 원하지 않습니다)
  • 일부는 텍스트 논쟁을 커밋 변경 로그에 포함되기 전에. (첫 글자 대문자 또는 마지막 점이있는 메시지를 정규화하지만 요약에서 일부 특수 마크 업을 제거 할 수 있음)
  • 당신입니다 자식 역사는 호환 ?. 대부분의 도구에서 병합, 태그 지정이 항상 그렇게 쉽게 지원되는 것은 아닙니다. 당신의 역사를 어떻게 관리 하느냐에 달려 있습니다.

선택적으로 일부 분류 (새로운 것, 변경 사항, 버그 수정)를 원할 수 있습니다 …

이 모든 것을 염두에두고 gitchangelog를 만들고 사용 했습니다 . 이전 목표를 모두 달성하기 위해 자식 커밋 메시지 규칙 을 활용 하기위한 것입니다.

커밋 메시지 규칙이 있어야 멋진 변경 로그를 만들 수 있습니다 (사용 여부에 관계없이 gitchangelog).

메시지 컨벤션 커밋

다음은 커밋 메시지 추가에 대해 생각할 때 유용한 제안입니다.

대략 커밋을 큰 섹션으로 분리하고 싶을 수도 있습니다.

  • 의도적으로 (예 : 신규, 수정, 변경 …)
  • 개체 별 (예 : 문서, 패키징, 코드 …)
  • 잠재 고객 별 (예 : 개발자, 테스터, 사용자 …)

또한 일부 커밋에 태그를 지정할 수 있습니다.

  • “사소한”커밋으로 변경 로그에 출력해서는 안됩니다 (화장품 변경, 의견의 작은 오타 …)
  • 중요한 기능 변경 사항이없는 경우 ‘리 팩터’로 따라서 이것은 예를 들어 최종 사용자에게 표시되는 변경 로그의 일부가 아니어야하지만 개발자 변경 로그가있는 경우 관심이있을 수 있습니다.
  • API 변경 사항이나 새로운 API를 표시하기 위해 “api”로 태그를 지정할 수도 있습니다.
  • …기타…

가능한 한 자주 사용자 (기능)를 대상으로 커밋 메시지를 작성하십시오.

다음은 git log --oneline이러한 정보를 저장하는 방법을 보여주는 표준입니다.

* 5a39f73 fix: encoding issues with non-ascii chars.
* a60d77a new: pkg: added ``.travis.yml`` for automated tests.
* 57129ba new: much greater performance on big repository by issuing only one shell command for all the commits. (fixes #7)
* 6b4b267 chg: dev: refactored out the formatting characters from GIT.
* 197b069 new: dev: reverse ``natural`` order to get reverse chronological order by default. !refactor
* 6b891bc new: add utf-8 encoding declaration !minor

알다시피, 내가 선택한 형식은 다음과 같습니다.

{new|chg|fix}: [{dev|pkg}:] COMMIT_MESSAGE [!{minor|refactor} ... ]

실제 출력 결과를 보려면 gitchangelog 의 PyPI 페이지 끝을 볼 수 있습니다

커밋 메시지 규칙에 대한 전체 문서를 보려면 참조 파일 gitchangelog.rc.reference를 볼 수 있습니다.

이것으로부터 절묘한 변경 로그를 생성하는 방법

그런 다음 완전한 변경 로그를 작성하는 것은 매우 쉽습니다. 직접 스크립트를 만들거나을 사용할 수 있습니다 gitchangelog.

gitchangelog전체 변경 로그를 생성하고 (섹션 지원 New, Fix…) 자신의 커밋 규칙으로 합리적으로 구성 할 수 있습니다. Mustache,를 통한 템플릿 화 덕분에 모든 유형의 출력을 지원하며 Mako templating원시 파이썬으로 작성된 기본 레거시 엔진이 있습니다. 현재 3 개의 모든 엔진에는 사용 방법에 대한 예제가 있으며 gitchangelog의 PyPI 페이지에 표시된 것과 같이 변경 로그를 출력 할 수 있습니다.

나는 거기 git logchangelog도구 가 많이 있다는 것을 알고 있다고 확신합니다 .


답변

CHANGELOG에 대한 더 많은 정보. 사람들이 좋아하면 말해줘

git log --since=1/11/2011 --until=28/11/2011 --no-merges --format=%B

답변

gitlog-to-changelog스크립트는 GNU 스타일을 생성하는 데 편리합니다ChangeLog .

로 표시된 것처럼 다음 옵션 중 하나를 사용하여 파일 gitlog-to-changelog --help을 생성하는 데 사용되는 커밋을 선택할 수 ChangeLog있습니다 --since.

gitlog-to-changelog --since=2008-01-01 > ChangeLog

또는에 추가 인수를 --전달하면 git-log(내부적으로에 의해 호출 됨 gitlog-to-changelog) :

gitlog-to-changelog -- -n 5 foo > last-5-commits-to-branch-foo

예를 들어, Makefile.am프로젝트 중 하나의 최상위 레벨에서 다음 규칙을 사용하고 있습니다.

.PHONY: update-ChangeLog
update-ChangeLog:
    if test -d $(srcdir)/.git; then                         \
       $(srcdir)/build-aux/gitlog-to-changelog              \
          --format='%s%n%n%b%n' --no-cluster                \
          --strip-tab --strip-cherry-pick                   \
          -- $$(cat $(srcdir)/.last-cl-gen)..               \
        >ChangeLog.tmp                                      \
      && git rev-list -n 1 HEAD >.last-cl-gen.tmp           \
      && (echo; cat $(srcdir)/ChangeLog) >>ChangeLog.tmp    \
      && mv -f ChangeLog.tmp $(srcdir)/ChangeLog            \
      && mv -f .last-cl-gen.tmp $(srcdir)/.last-cl-gen      \
      && rm -f ChangeLog.tmp;                               \
    fi

EXTRA_DIST += .last-cl-gen

이 규칙은 릴리스시 ChangeLog아직 기록되지 않은 최신 커밋 메시지 로 업데이트 하는 데 사용됩니다 . 파일 .last-cl-gen에는 기록 된 최신 커밋의 SHA1 식별자가 포함되어 ChangeLog있으며 Git 리포지토리에 저장됩니다. ChangeLog또한 커밋 메시지를 변경하지 않고 편집 (예 : 오타 수정) 할 수 있도록 리포지토리에 기록됩니다.


답변

버전마다 태그를 작성하는 것이 가장 좋으므로 버전별로 변경 로그를 분할 할 수 있습니다. 이 경우이 명령이 도움이 될 수 있습니다.

git log YOUR_LAST_VERSION_TAG..HEAD --no-merges --format=%B

답변

대한 GitHub의 프로젝트가 유용 할 수 있습니다 : GitHub의 변경 로그 발전기

태그 닫힌 문제 및 병합 된 풀 요청에서 변경 로그를 생성합니다.

CHANGELOG.md 는이 스크립트에 의해 생성되었습니다.

예:

변경 로그

1.2.5 (2015-01-15)

전체 변경 내역

개선 된 기능 :

  • 마일스톤을 사용하여 수정 된 버전 버그 지정 # 22

수정 된 버그 :

  • 태그 # 32 없이 저장소에 대한 로그를 생성하려고 할 때 오류가 발생했습니다.

병합 된 풀 요청 :

  • PrettyPrint 클래스는 소문자 ‘pp’ # 43 ( schwing )을 사용하여 포함됩니다

  • 명령 행 옵션 # 42 ( glenlovett ) 를 통해 엔터프라이즈 github 지원