Git를 사용하여 변경 로그를 관리하는 좋은 방법은 무엇입니까?
저는 Git를 한동안 사용해 왔으며 최근에는 변경 사항을 더 쉽게 추적하고 각 클라이언트가 실행 중인 버전을 확인할 수 있도록 릴리스에 태그를 지정하기 위해 Git을 사용하기 시작했습니다(불행하게도 코드는 현재 각 클라이언트가 PHP 사이트의 자체 복사본을 가지고 있어야 합니다. 저는 이것을 변경하고 있지만 속도가 느립니다.
어쨌든 우리는 어느 정도 모멘텀을 구축하기 시작했고, 지난 출시 이후에 달라진 모습을 사람들에게 보여줄 수 있다면 정말 좋을 것 같다는 생각이 들었습니다.문제는, 제가 변경 로그를 관리하지 않았다는 것입니다. 어떻게 해야 할지 잘 모르기 때문입니다.이 특정 시간 동안 로그를 실행하여 수동으로 로그를 생성할 수 있지만, 이 작업은 매우 빠르게 수행됩니다.
"git change log"와 "git manage change log"를 구글에 검색해봤지만, 코드 변경의 워크플로우와 변경 로그와 어떻게 일치하는지에 대해 실제로 이야기할 만한 것을 찾지 못했습니다.우리는 현재 라인 헨리치스의 개발 작업 흐름을 따르고 있으며, 저는 그것과 함께 진행된 것을 원합니다.
제가 놓치고 있는 표준적인 접근법이 있나요, 아니면 여기가 모두가 자신의 일을 하는 영역인가요?
이것은 2015년에 있었던 일이지만, 미래의 검색자들을 위해 이제 다음과 같은 기능으로 멋진 로그를 생성할 수 있습니다.
git log --oneline --decorate
또는 더 예쁜 색상(단말기 색상 포함)을 원하는 경우:
git log --oneline --decorate --color
ChangeLog에 출력되는 파이프는 제가 현재 모든 프로젝트에서 사용하는 것입니다. 정말 놀랍습니다.
의 맛을 사용할 수 있습니다.git log도움이 필요합니다.
git log --pretty=%s # Only prints the subject
분기 이름을 적절하게 지정하여 마스터로의 병합이 "통합된 분기 기능-foobar"와 같은 것으로 표시되도록 하면 병합한 모든 작은 커밋이 기능을 구성하지 않고 해당 메시지만 표시하여 항목을 단축할 수 있습니다.
git log --pretty=%s --first-parent # Only follow the first parent of merges
"통합 분기" 비트를 제거하고 포맷을 정규화하는 등의 작업을 수행할 수 있는 자체 스크립트를 사용하여 이를 확장할 수 있습니다.물론 어느 순간에는 당신이 직접 작성해야 합니다.
그런 다음 버전당 한 번씩 변경 로그에 대한 새 섹션을 만들 수 있습니다.
git log [opts] vX.X.X..vX.X.Y | helper-script > changelogs/X.X.Y
버전 릴리스 커밋에서 이를 커밋합니다.
문제가 이러한 커밋 제목이 변경 로그에 저장하려는 것과 전혀 다르다는 것이라면 거의 두 가지 옵션이 있습니다. 모든 작업을 수동으로 계속 수행하거나(그리고 릴리스 시에 따라잡기를 하는 대신 더 규칙적으로 수행하도록 노력) 커밋 메시지 스타일을 수정하는 것입니다.
여러분을 한 가지 방법은 ": foobar같은 의 커밋 메시지 입니다. 은 " 약대자들변와경우않을커본, 메한옵은밋션시지푸가지에문같바것하작은다같수"와 같은 것을 할 수.git log --pretty=%B | grep ^change:아주 중요한 메시지들만 받아 들일 수 있습니다.
Git이 변경 로그를 작성하는 데 얼마나 많은 도움을 줄 수 있는지 잘 모르겠습니다.제가 "관리"의 뜻을 잘못 이해한 것은 아닐까요?
TL;DR: gitchchangelog의 자체 변경 로그 또는 이전에 생성된 ASCII 출력을 확인할 수 있습니다.
Git 기록에서 변경 로그를 생성하려면 다음을 고려해야 합니다.
- 출력 형식. (순수 사용자 정의 ASCII, Debian 변경 로그 유형, Markdown, REST 등)
- 일부 커밋 필터링(변경 로그에 입력되는 모든 오타 또는 외관 변경 사항을 보고 싶지 않을 수 있음)
- 일부는 변경 로그에 포함되기 전에 텍스트 경합을 수행합니다. (메시지의 정규화를 첫 글자 대문자 또는 마지막 점으로 보장하지만 요약에서 일부 특수 마크업을 제거할 수도 있습니다.)
- 당신의 Git 이력은 호환됩니까?병합 및 태그 지정은 대부분의 도구에서 항상 쉽게 지원되는 것은 아닙니다.역사를 어떻게 관리하느냐에 따라 다릅니다.
선택적으로 몇 가지 범주(새로운 항목, 변경 사항, 버그 수정 등)를 원할 수 있습니다.
이 모든 것을 염두에 두고 gitchchangelog를 만들고 사용했습니다.이는 Git commit 메시지 협약을 활용하여 이전의 모든 목표를 달성하기 위한 것입니다.
합니다. (와 상관없이).gitchangelog).
커밋 메시지 규칙
다음은 커밋 메시지에 추가하는 것이 유용할 수 있는 방법에 대한 제안입니다.
커밋을 대략적으로 큰 섹션으로 구분할 수 있습니다.
- 의도적으로(예: 신규, 수정, 변경 등)
- 개체별(예: 문서, 패키징, 코드 등)
- 대상자별(예: 개발자, 테스터, 사용자 등)
또한 일부 커밋에 태그를 지정할 수 있습니다.
- 변경 로그에 출력되지 않아야 하는 커밋(변경 사항이 잘못되었거나 주석이 약간 오타가 발생하는 등)을 "잘못된" 커밋으로 처리합니다.
- 중요한 피쳐 변경이 없는 경우 "리팩터"로 표시됩니다.따라서 이것도 최종 사용자에게 표시되는 변경 로그의 일부가 아니어야 하지만 개발자 변경 로그가 있는 경우 관심을 가질 수 있습니다.
- API 변경이나 새로운 API를 표시하기 위해 "API"로 태그를 지정할 수도 있습니다.
- ...등...
가능한 한 자주 사용자(기능)를 대상으로 하여 커밋 메시지를 작성합니다.
예
이것이니다입.git log --oneline이 정보를 저장하는 방법을 보여줍니다.
* 5a39f73 fix: encoding issues with non-ASCII characters.
* 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 페이지 끝을 보면 됩니다.
커밋 메시지 규칙의 전체 문서를 보려면 참조 파일 gitchchangelog.rc.reference를 참조하십시오.
이로부터 정교한 변경 로그를 생성하는 방법
그러면, 완전한 변경 로그를 만드는 것은 꽤 쉽습니다.당신은 당신만의 스크립트를 꽤 빨리 만들 수도 있고, 혹은 사용할 수도 있습니다.gitchangelog.
gitchangelog로그를 을 "" " " " " " (" " " " " " " "로 표시됨).New,Fix및의 커밋 할 수 템플릿을 통해 모든 유형의 출력을 지원합니다.Mustache,Mako templating기본 레거시 엔진은 원시 Python으로 작성되어 있으며, 현재 세 개의 엔진은 모두 사용 방법에 대한 예제를 가지고 있으며 gitchchangelog의 PyPI 페이지에 표시된 변경 로그를 출력할 수 있습니다.
은 다른 많은 있을입니다.git logchangelog도구도 있습니다.
고지 사항:저는 다음에 말씀드릴 gitchchangelog의 저자입니다.
더 중요한 변경 로그:
git log --since=1/11/2011 --until=28/11/2011 --no-merges --format=%B
이 스크립트는 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중 : 로프젝트중하나내:▁of내프로:하:
.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
시 이규은릴시는데하사다니됩용트이데업리스칙다▁update▁is를 업데이트하는 데 됩니다.ChangeLog아직 확인되지 않은 최신 커밋 메시지가 있습니다. ».last-cl-gen에는 에기 최커밋의신 SHA-1에 된 최신 가 포함되어 .ChangeLogGit 저장소에 저장됩니다. ChangeLog또한 저장소에 기록되므로 커밋 메시지를 변경하지 않고 편집(예: 오타 수정)할 수 있습니다.
버전별로 태그를 만드는 것이 최선이므로 버전별로 변경 로그를 분할할 수 있습니다.이 경우 이 명령을 사용하면 다음과 같은 이점을 얻을 수 있습니다.
git log YOUR_LAST_VERSION_TAG..HEAD --no-merges --format=%B
저는 이것을 위해 도서관도 만들었습니다.콧수염 템플릿을 사용하여 완전히 구성할 수 있습니다.가능성:
저는 또한 다음을 만들었습니다.
자세한 내용은 GitHub: https://github.com/tomasbjerre/git-changelog-lib 에서 확인할 수 있습니다.
명령줄에서:
npx git-changelog-command-line -std -tec "
# Changelog
Changelog for {{ownerName}} {{repoName}}.
{{#tags}}
## {{name}}
{{#issues}}
{{#hasIssue}}
{{#hasLink}}
### {{name}} [{{issue}}]({{link}}) {{title}} {{#hasIssueType}} *{{issueType}}* {{/hasIssueType}} {{#hasLabels}} {{#labels}} *{{.}}* {{/labels}} {{/hasLabels}}
{{/hasLink}}
{{^hasLink}}
### {{name}} {{issue}} {{title}} {{#hasIssueType}} *{{issueType}}* {{/hasIssueType}} {{#hasLabels}} {{#labels}} *{{.}}* {{/labels}} {{/hasLabels}}
{{/hasLink}}
{{/hasIssue}}
{{^hasIssue}}
### {{name}}
{{/hasIssue}}
{{#commits}}
**{{{messageTitle}}}**
{{#messageBodyItems}}
* {{.}}
{{/messageBodyItems}}
[{{hash}}](https://github.com/{{ownerName}}/{{repoName}}/commit/{{hash}}) {{authorName}} *{{commitTime}}*
{{/commits}}
{{/issues}}
{{/tags}}
"
또는 Jenkins에서:
GNU 스타일 변경 로그
GNU 스타일 변경 로그의 경우, 저는 다음 기능을 요리를 했습니다.
gnuc() {
{
printf "$(date "+%Y-%m-%d") John Doe <john.doe@gmail.com>\n\n"
git diff-tree --no-commit-id --name-only -r HEAD | sed 's/^/\t* /'
} | tee /dev/tty | xsel -b
}
사용:
- 변경 로그를 최종 편집하기 전에 변경 사항을 주기적으로 백업 및 기본 재배치합니다.
- 그런 다음 실행:
gnuc
이제 클립보드에 다음과 같은 내용이 포함됩니다.
2015-07-24 John Doe <john.doe@gmail.com>
* gdb/python/py-linetable.c (): .
* gdb/python/py-symtab.c (): .
그런 다음 클립보드를 시작점으로 사용하여 ChangeLog를 업데이트합니다.
: 파일: ChangeLog 경로 지정).python/py-symtab.c 없이gdb/내가 편집할 것이기 때문에.gdb/ChangeLog은 좋은 출발점입니다.), 하만지그좋은출입니다발점것은▁),다니입출발점▁but▁it▁point.
추가 고급 스크립트:
- GDB 관리자인 Tromey의 git-gnu-change 로그
- GCC의 기여/mklog
- gcc/smdk/smdk 로그
하지만 나는 Tromey의 의견에 동의해야 합니다: ChangeLog에 Git commit 데이터를 복제하는 것은 쓸모가 없습니다.
변경 로그를 작성하려면 변경 로그 보관에 지정된 대로 진행 상황을 요약하여 작성합니다.
git log --oneline --no-merges `git describe --abbrev=0 --tags`..HEAD | cut -c 9- | sort
제가 좋아하는 것입니다.마지막 태그 이후 모든 커밋을 가져옵니다. cut커밋 해시를 제거합니다.커밋 메시지의 시작 부분에 티켓 번호를 사용하는 경우 티켓 번호는 다음과 같이 그룹화됩니다.sort정렬은 특정 커밋 앞에 다음 항목을 추가할 경우에도 도움이 됩니다.fix,typo 타기.
bitavoc을 기준으로 다음은 다음 기간까지 마지막 태그를 나열합니다.HEAD하지만 저는 두 태그 사이의 로그를 나열하고 싶습니다.
// Two or three dots between `YOUR_LAST_VERSION_TAG` and `HEAD`
git log YOUR_LAST_VERSION_TAG..HEAD --no-merges --format=%B
두 태그 사이의 로그 나열:
// Two or three dots between two tags
git log FROM_TAG...TO_TAG
를 들어, " ▁from"의 로그가 나열됩니다.v1.0.0v1.0.1:
git log v1.0.0...v1.0.1 --oneline --decorate
CI 서버가 다음과 같은 이름의 파일을 파이프로 연결하도록 했습니다.CHANGELOG각 새 :
git log --graph --all --date=relative --pretty=format:"%x09 %ad %d %s (%aN)"
언급URL : https://stackoverflow.com/questions/3523534/what-are-some-good-ways-to-manage-a-changelog-using-git
'programing' 카테고리의 다른 글
| 포함된 Tomcat org.springframework.context를 시작할 수 없습니다.응용 프로그램 컨텍스트 예외 (0) | 2023.07.15 |
|---|---|
| Robomongo : $group의 메모리 제한을 초과함 (0) | 2023.07.15 |
| Angular 2-Types 스크립트에서 선택적 클래스 매개 변수를 설정하는 방법은 무엇입니까? (0) | 2023.07.15 |
| 이 SQL Server 제약 조건에서 PAD_INDEX의 목적은 무엇입니까? (0) | 2023.07.15 |
| SQL 서버에 null 값을 삽입하는 방법 (0) | 2023.07.15 |
