rc-X 양식의 버전 문자열 순서에 따라 git 태그를 정렬하는 방법Y.Z.W?
명령을 입력할 때:
git tag -l
결과는 다음과 같습니다.
rc-0.9.0.0
rc-0.9.0.1
rc-0.9.0.10
rc-0.9.0.11
rc-0.9.0.12
rc-0.9.0.2
rc-0.9.0.3
rc-0.9.0.4
rc-0.9.0.5
rc-0.9.0.6
rc-0.9.0.7
rc-0.9.0.8
rc-0.9.0.9
이것 대신에 나는 다음을 원합니다.
rc-0.9.0.0
rc-0.9.0.1
rc-0.9.0.2
rc-0.9.0.3
rc-0.9.0.4
rc-0.9.0.5
rc-0.9.0.6
rc-0.9.0.7
rc-0.9.0.8
rc-0.9.0.9
rc-0.9.0.10
rc-0.9.0.11
rc-0.9.0.12
현재 목록을 정렬하여 그러한 결과를 얻을 수 있는 방법은 무엇입니까?
버전 정렬 사용
git tag -l | sort -V
또는 forgit version >= 2.
git tag -l --sort=v:refname
git tag -l --sort=-v:refname # reverse
Git 2.0(2014년 6월)을 사용하면 정렬 순서를 지정할 수 있습니다!
Nguyn Thai Ngọc Duy()가 작성한 commit 9ef176b의 commit b6de0c6 참조:
--sort=<type>
특정 순서대로 정렬합니다.
지원되는 유형은 다음과 같습니다.
- "
refname
" (),- "
version:refname
" 또는 "v:refname
" 태그 이름은 버전으로 처리됩니다."pread" 앞에
-
로 정렬합니다."라고 .
그렇다면 다음과 같은 것이 있습니다.
git tag foo1.3 &&
git tag foo1.6 &&
git tag foo1.10
다음은 다음과 같습니다.
# lexical sort
git tag -l --sort=refname "foo*"
foo1.10
foo1.3
foo1.6
# version sort
git tag -l --sort=version:refname "foo*"
foo1.3
foo1.6
foo1.10
# reverse version sort
git tag -l --sort=-version:refname "foo*"
foo1.10
foo1.6
foo1.3
# reverse lexical sort
git tag -l --sort=-refname "foo*"
foo1.6
foo1.3
foo1.10
커밋 b150794(Jacob Keller, git 2.1.0, 2014년 8월) 이후로 기본 순서를 지정할 수 있습니다.
tag.sort
이 변수는 에 표시될 때 태그 정렬 순서를 제어합니다.
""--sort=<value>
이 option 의 이 으로 됩니다 됩니다 으로 이 의 .
버전 정렬 순서(Git 2.1+)를 기본값으로 구성할 수 있습니다.
git config --global tag.sort version:refname
레오 갈레길로스(Leo Galleguillos)가 코멘트에서 언급한 바와 같이:
최신 태그를 먼저 표시하도록 Git을 구성하려면(하행 순서) 버전 전에 하이픈만 추가하면 됩니다.
는 다음과git config --global tag.sort -version:refname
Git 2.4(2015년 2분기)를 사용하면 구성 변수를 사용하여 다음을 지정할 수 있습니다.
Junio C Hamano()gitster
의 커밋 f57610a 참조.
) ( )versionsort.prereleaseSuffix
는 현재는재의지다r다의d의 감가상각 별칭입니다.versionsort.suffix
.
22016년은 git 2.7.1(2016년 2월)의 입니다.git tag
그 자체.
제프 킹의 peff
커밋 0571979(2016년 1월 26일) 및 커밋 1d094db(2016년 1월 24일)를 참조하십시오.
(2016년 2월 1일, 준오 C 하마노 ---- 커밋 8bad3de에서 합병)
tag
로 하지 을 하지 로 을 "로 표시하지 않음tags/foo
"B7cc53e 이후 (
tag.c
: '를 사용합니다.ref-filter
'APIs, 2015-07-11),git tag
이름을 한기했습니다즉둘즉다다둘hs",이기shd(ig한s "heads/foo
" 그리고"tags/foo
"" "로tags/foo
""foo
".
이것은 둘 다입니다.
- "한"의, "의"의 출력.
git tag
" 만 합니다 만을 합니다.refs/tags
, 그래서 우리는 그것을 알고 있습니다.foo
" "에 있는 것을 의미합니다.refs/tags
".- 모호하다;행 " 에서 의 라는 이 는 을 라는 을 이
foo
""는 라는"를 의미합니다.refs/tags/foo
" 존재합니다.새로운 결과물에서는 ""을 의미하는지 여부가 불분명합니다.refs/tags/foo
" 또는 "refs/tags/tags/foo
".switched 는 b7cc53e 입니다 입니다
git tag
재필터를 사용하다"%(refname:short)
" 출력 포맷, 에서 조정된for-each-ref
. 이 보다 일반적인 코드는 우리가 태그에만 관심이 있다는 것을 알지 못하고 사용합니다.shorten_unambiguous_ref
을 얻다short-name
.
우리는 오직 "만 신경 쓴다는 것을 말할 필요가 있습니다."refs/tags/
", 그리고 그 값에 관해서는 짧아져야 합니다.특정 접두사 구성 요소 집합을 제거하기 위해 서식 언어인
strip
""에 새로운 수식어를 추가해 보겠습니다.
이로 인해 "git tag
", 사용자가 자신의 사용자 지정 형식에서 동일한 동작을 호출할 수 있습니다(for ").tag
" 또는 "for-each-ref
") 나가면서":short
" 모든 장소에서 동일한 의미를 가지고 있습니다.한다면
strip=<N>
첨부, 스트립(strip)<N>
refname 앞에서 슬래시로 구분된 경로 구성요소(예:%(refname:strip=2)
돌돌돌돌돌돌돌돌돌림판들refs/tags/foo
안으로foo
.
<N>
양의 정수여야 합니다.
표시된 참조의 성분 수가 다음보다 적을 경우<N>
, 명령이 오류로 중단됩니다.
위해서git tag
, 지정되지 않은 경우 기본값은%(refname:strip=2)
.
Git 2.12 업데이트 (2017년 1분기)
SZEDER Gabor()szeder
의 c026557, commit b178464, commit 51acfa9, commit b823166, commit 109064a, commit 0c1b487, commit 9ffda48, commit eba286e(2016년 12월 8일)를 참조하십시오.
(2017년 1월 23일 주니오 C 하마노 ---- 커밋 1ac244d에서 합병)
versionsort.prereleaseSuffix
는 에 대한 사용되지 않는 별칭입니다.versionsort.suffix
.
그
prereleaseSuffix
"에서 사용되는 버전 비교 기능git tag -l
" 동일한 릴리스에 대해 둘 이상의 사전 릴리스가 있을 때(예:2.0
,2.0-beta1
,그리고.2.0-beta2
거기에 있고 코드는 비교해야 합니다.2.0-beta1
그리고.2.0-beta2
).
여기에 이미 나와 있는 답변을 종합하면 다음과 같습니다.
로컬 저장소
git -c 'versionsort.suffix=-' tag --list --sort=-v:refname
suffix=-
예방할 것입니다2.0-rc
"이후"에 오는 것2.0
--sort=-
가장 높은 버전 번호가 맨 위에 표시됩니다.
원격 저장소
git -c 'versionsort.suffix=-' ls-remote -t --exit-code --refs --sort=-v:refname "$repo_url" \
| sed -E 's/^[[:xdigit:]]+[[:space:]]+refs\/tags\/(.+)/\1/g'
원격에서 다운로드되는 개체가 없다는 것이 장점입니다.
자세한 내용은 이 답변을 참조하십시오.
이 답변에 따르면, 지원하지 않는 플랫폼에서sort -V
윈도우와 OSX처럼 사용할 수 있습니다.
git tag -l | sort -n -t. -k1,1 -k2,2 -k3,3 -k4,4
역순 정렬을 가져오려면sort -V
접근 방식:
git tag -l | sort -V --reverse
다음과 같은 태그를 정렬하는 이 Perl 스크립트를 조정합니다.client_release/7.2/7.2.25
, 특정 태그 지정 방식으로 변경할 수 있습니다.
저는 이 작업을 단순화하기 위해 간단한 셸 스크립트를 작성하게 되었습니다.
#!/usr/bin/env bash
TAGS=$(git tag)
CODE=$?
if [ $CODE = 0 ]; then
echo "$TAGS" | sort -V
fi
exit $CODE
라고 저장했습니다.git-tags
내 안에$PATH
그리고 달리다git tags
태그 목록을 작성해야 할 때마다.
Linux를 사용하고 ZSH를 사용하는 경우 단순하게 사용gtl
지휘.Alias로 미리 정의되어 있어야 합니다.
별칭 코드:
gtl='gtl(){ git tag --sort=-v:refname -n -l "${1}*" }; noglob gtl'
마지막으로 특별한 형식에 대한 시도 목록
git tag -l --sort=refname | grep -E '^\d+\.\d+\.\d+.*' | tail -n 1
아니면 첫번째
git tag -l --sort=refname | grep -E '^\d+\.\d+\.\d+.*' | head -n 1
언급URL : https://stackoverflow.com/questions/14273531/how-to-sort-git-tags-by-version-string-order-of-form-rc-x-y-z-w
'programing' 카테고리의 다른 글
TextInputLayout의 부동 레이블 색상을 변경하는 방법 (0) | 2023.09.08 |
---|---|
익명 객체에 메소드가 있는지 확인하는 방법은? (0) | 2023.09.08 |
다양한 제품 맛에 대해 서로 다른 의존성을 정의하는 방법 (0) | 2023.09.08 |
메뉴 항목을 작업 표시줄에 숨기려면 어떻게 해야 합니까? (0) | 2023.09.08 |
jQuery 플러그인이 로드되었는지 확인하려면 어떻게 해야 합니까? (0) | 2023.09.08 |