git 태그 버전의 경우: 'v' 접두사가 아닌 주석 태그를 사용하십시오.
8711 단어 git
major.minor.patch
( Semantic Versioning 2.0.0 | Semantic Versioning 참조)와 같은 의미 있는 버전 번호로 커밋에 태그를 지정하는 것은 소스 트리의 이름을 지정하는 일반적인 방법입니다.'v' 접두사를 사용하는 것이 유용하지 않은 이유는 무엇입니까?
일반적인 관행은
v1.0.0
와 같이 버전 태그에 'v' 접두사를 붙이는 것이지만 왜 그런지 이해가 되지 않습니다.패턴
v*
이 있는 버전을 참조하는 태그를 쉽게 식별하기 위함이 아니다. 이 패턴은 문자 v
로 시작하는 버전이 아닌 태그도 가져오기 때문입니다. 따라서 v*.*.*
와 같은 더 복잡한 패턴을 사용하거나 regexp를 지원하는 도구를 결합해야 합니다.# accept v1.0.0 and 1.0.0
git tag -l '*.*.*'
# combine with grep to have a more selective pattern
git tag -l | grep -P '\d+\.\d+\.\d+'
버전에 대해서만 태그를 사용하는 경우 "접두사를 사용하는 이유는 무엇입니까?"그렇지 않은 경우 버전 태그는 문자로 시작하는 태그와 잠재적으로 혼합됩니다(
a...
, b...
, ..., v...
, w...
). 'v' 접두어가 없으면 숫자가 알파벳 순서로 앞이나 뒤에 오며 시간 기반 순서는 변경되지 않습니다.태그를 사용하여 소스 트리의 현재 버전을 추출하는 경우 다른 문제가 발생합니다. 접두사를 제거해야 합니다.
따라서
v
접두사 없이 다음과 같이 할 수 있습니다 (github-actions Filter pattern cheat sheet ):on:
push:
tags:
#- 'v*.*.*'
- '[0-9]+.[0-9]+.[0-9]+'
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set env
run: echo "RELEASE_VERSION=${GITHUB_REF#refs/*/}" >> $GITHUB_ENV
- name: Test
run: |
echo $RELEASE_VERSION
echo ${{ env.RELEASE_VERSION }}
왜 주석이 달린 태그인가?
주석이 달린 태그는 "heavyweight"태그와 같습니다. 즉, 커밋과 마찬가지로 메시지와 작성자도 포함됩니다. IMHO, 버전 번호의 중요성을 표시하고 경량 태그에서 분리하는 완벽한 방법이기도 합니다.
# create an annotated tag
git tag -a "0.1.0" -m ":bookmark: 0.1.0"
버전에 대해서만 주석 태그를 사용하는 경우
git describe
를 사용하여 현재 작업 트리의 "반 의미론적 버전"을 알 수 있음을 의미합니다(필터를 적용할 필요 없이).❯ git describe -h
usage: git describe [<options>] [<commit-ish>...]
or: git describe [<options>] --dirty
--contains find the tag that comes after the commit
--debug debug search strategy on stderr
--all use any ref
--tags use any tag, even unannotated
--long always use long format
--first-parent only follow first parent
--abbrev[=<n>] use <n> digits to display object names
--exact-match only output exact matches
--candidates <n> consider <n> most recent tags (default: 10)
--match <pattern> only consider tags matching <pattern>
--exclude <pattern> do not consider tags matching <pattern>
--always show abbreviated commit object as fallback
--dirty[=<mark>] append <mark> on dirty working tree (default: "-dirty")
--broken[=<mark>] append <mark> on broken working tree (default: "-broken")
내가 가장 좋아하는 주장은 다음과 같습니다.
git describe --always --dirty
왜냐하면 :
0.1.0
) <last_annotated_tag>-<number_of_commit>-g<last_commit_short_hash>
를 반환합니다(예: 0.1.0-2-ge453fae
) -dirty
(추적되지 않은 파일 및 무시된 파일 무시)❯ git init
❯ touch README.md
❯ git add README.md
❯ git commit -m "add README"
[development (root-commit) 8edcbdc] add README
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 README.md
❯ git describe --always --dirty
8edcbdc
❯ git tag -a "0.1.0" -m ":bookmark: 0.1.0"
❯ git describe --always --dirty
0.1.0
❯ echo "toto" > README.md
❯ git describe --always --dirty
0.1.0-dirty
❯ git commit -a -m "modify README"
[development 6cfe247] modify README
1 file changed, 1 insertion(+)
❯ git describe --always --dirty
0.1.0-1-g6cfe247
❯ echo "toto 33" > README.md
❯ git describe --always --dirty
0.1.0-1-g6cfe247-dirty
따라서 작업 트리의 모든 상태에 대해 고유한 버전 번호가 있으며 커밋 해시보다 인간 친화적입니다.
버전 번호를 계산할 수 있는 빌드 도구를 사용하는 경우(toml 또는 xml과 같은 선언적 대신) 이 명령을 사용하여 항상 고유한 현재 버전을 가질 수 있습니다. Gradle 기반 빌드의 경우 버전을 다음과 같이 정의할 수 있습니다.
# build.gradle
version = "git --no-pager describe --always --dirty".execute().text.trim()
팁
0.0.0
가 언제 생성될지 모르는 경우 첫 번째 주석이 달린 태그를 가능한 한 빨리 생성하십시오. 초기 커밋 후에 버전0.1.0
에 태그를 지정할 수 있습니다.주석이 달린 태그는 다음을 통해 단일 명령으로 커밋으로 푸시할 수 있습니다.
git push --follow-tags
마지막 말
사실 그것들은 반대가 아니므로 주석 태그를 사용하지 않고
v
접두어 사용을 중지하거나 주석 태그와 함께 v
접두어를 사용하는 것이 가능하지만 더 나은 조합(IMHO)은 v
접두어와 주석 태그를 사용하지 않는 것입니다 버전용.
Reference
이 문제에 관하여(git 태그 버전의 경우: 'v' 접두사가 아닌 주석 태그를 사용하십시오.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/davidb31/for-version-as-git-tag-use-annotated-tag-not-v-prefix-2i4c텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)