브랜치에 포함 된 목록 태그
다음과 반대로 지정된 분기에 포함 된 태그를 나열하려면 어떻게해야합니까?
git tag --contains <commit>
"지정된 커밋을 포함하는 태그 만 나열"합니다.
이와 같은 것이 존재하지 않는 경우이를 스크립팅 할 수 있도록 커밋이 다른 커밋에 포함되어 있는지 어떻게 테스트합니까?
나는 이것을 할 수있다 :
commit=$(git rev-parse $branch)
for tag in $(git tag)
do
git log --pretty=%H $tag | grep -q -E "^$commit$"
done
그러나 태그와 커밋이 많은 저장소에서 시간이 오래 걸릴 수 있으므로 더 나은 방법이 있기를 바랍니다.
이것은 당신이 원하는 것에 가깝습니다.
git log --simplify-by-decoration --decorate --pretty=oneline "$committish" | fgrep 'tag: '
그러나 더 일반적인 상황은 가장 최근의 태그를 찾는 것입니다.
git describe --tags --abbrev=0 "$committish"
--tags
경량 태그를 검색하므로 주석이 달린 태그 만 고려하려는 경우에는 사용하지 마십시오.--abbrev=0
일반적인 " '상위 커밋 수'및 축약 된 해시 수"접미사 (예 : v1.7.0-17-g7e5eb8)도 보려면 사용하지 마십시오 .
git tag --merged <branch>
man 페이지에서 :
--[no-]merged <commit>
Only list tags whose tips are reachable, or not reachable if --no-merged is used, from the specified commit (HEAD if not specified).
나는이 옵션이 아주 최근에 추가되었다고 생각합니다. 원래 질문이 제기되고 위의 답변이 제안되었을 때 확실히 다시 사용할 수 없었습니다. 이 스레드는 여전히 Google에서 질문에 대한 첫 번째 히트이므로 허용 된 답변보다 입력이 적은 답변을 찾는 사람을 위해 아래로 스크롤하는 사람을 위해 던질 것입니다 (잊었을 때 내 자신의 참조를 위해 이 답변은 다음 주에 다시).
현재 브랜치에서 도달 할 수있는 모든 태그를 나열하려면 :
git log --decorate=full --simplify-by-decoration --pretty=oneline HEAD | \
sed -r -e 's#^[^\(]*\(([^\)]*)\).*$#\1#' \
-e 's#,#\n#g' | \
grep 'tag:' | \
sed -r -e 's#[[:space:]]*tag:[[:space:]]*##'
나는 다른 사람들의 게시물에 댓글을 달 수있는 충분한 평판을 갖고 있지 않지만 이것은 https://stackoverflow.com/a/7698213/2598329 의 답변과 댓글에 대한 응답 입니다. HEAD 커밋의 태그를 포함하여 현재 분기에서 도달 할 수있는 모든 태그를 표시하려면 다음을 사용할 수 있습니다.
git log --decorate --oneline | egrep '^[0-9a-f]+ \((HEAD, )?tag: ' | ssed -r 's/^.+tag: ([^ ]+)[,\)].+$/\1/g'
한 가지주의 사항-저는 super sed를 사용하므로 "ssed"를 sed로 변경해야 할 수도 있습니다.
그리고 지옥을 위해 여기 PowerShell에 있습니다.
git log --decorate --oneline | % { if ($_ -match "^[0-9a-f]+ \((HEAD, )?tag: ") { echo $_} } | % { $_ -replace "^.+tag: ([^ ]+)[,\)].+$", "`$1" }
-- -ㅏ
패턴 (TAG_PREFIX *)과 일치하는 주석이 추가 된 태그를 시간 역순으로 나열하는 방법은 다음과 같습니다. 이 레시피는 git-describe를 사용합니다.
#!/usr/bin/env bash
tag=$(git describe --abbrev=0 --match TAG_PREFIX*)
until [ -z $tag ]; do
echo $tag
tag=$(git describe --abbrev=0 --match TAG_PREFIX* $tag^ 2>/dev/null);
done
패턴과 일치하는 여러 태그가 동일한 커밋을 가리키는 경우에는 작동하지 않습니다. 이를 위해 git-rev-list 및 git-tag를 사용하여 커밋 (이 예에서는 HEAD)에서 시작하여 TAG_PREFIX *와 일치하는 모든 태그를 나열하는 또 다른 레시피가 있습니다.
#!/usr/bin/env bash
git rev-list HEAD | while read sha1; do
tags=( "$(git tag -l --points-at $sha1 TAG_PREFIX*)" )
[[ ! -z ${tags[*]} ]] && echo "${tags[@]}" | sort -r
done
git describe (또는 일부 변형)이 당신이 찾고있는 것일 수 있습니다.
이것을 사용할 수 있습니다.
# get tags on the last 100 commits:
base_rev=master~100
end_rev=master
for rev in $(git rev-list $base_rev..$end_rev)
do
git describe --exact-match $rev 2> /dev/null
done
많은 수의 태그에 효율적이고 간편한 형식 유연성 확보 :
{ git rev-list --first-parent ${1:-HEAD}
git for-each-ref --format='%(objectname) %(objecttype) %(refname)
%(*objectname) *(%(objecttype)) %(refname)'
} \
| awk '
NF==1 { revs[$1]=1; next }
{ if ( $1 in revs ) print $1,$2,$3 }
'
모든 참조를 가져 오면 refs/tags
fer에 추가 하여 제한합니다.
있다 git branch --contains
(힘내 1.5.7 이후, 적어도)
ReferenceURL : https://stackoverflow.com/questions/2381665/list-tags-contained-by-a-branch
'programing' 카테고리의 다른 글
Java Servlet을 사용하여 게시물 변수에 액세스 (0) | 2021.01.06 |
---|---|
UIViewController 푸시를위한 커스텀 애니메이션 (0) | 2021.01.06 |
null 값이있는 비교기 (0) | 2021.01.06 |
반응 라우터는 모든 전환에서 맨 위로 스크롤합니다. (0) | 2021.01.05 |
C ++ 배열에 요소를 추가하는 방법은 무엇입니까? (0) | 2021.01.05 |