giải pháp thực sự tốt timhc22 Điều duy nhất là nó mất thẻ cuối cùng (bất kể các chi nhánh) Nếu bạn làm việc trên một dự án với nhiều chi nhánh bạn có thể có một vấn đề . Tôi đề xuất chỉ là một cải tiến với cơ sở của bạn.
#!/bin/sh
# retrieve branch name
BRANCH_NAME=$(git branch | sed -n '/\* /s///p')
# remove prefix release
REGEXP_RELEASE="release\/"
VERSION_BRANCH=$(echo "$BRANCH_NAME" | sed "s/$REGEXP_RELEASE//")
echo "Current version branch is $VERSION_BRANCH"
# retrieve the last commit on the branch
VERSION=$(git describe --tags --match=$VERSION_BRANCH* --abbrev=0)
# split into array
VERSION_BITS=(${VERSION//./ })
#get number parts and increase last one by 1
VNUM1=${VERSION_BITS[0]}
VNUM2=${VERSION_BITS[1]}
VNUM3=${VERSION_BITS[2]}
VNUM3=$((VNUM3+1))
#create new tag
NEW_TAG="$VNUM1.$VNUM2.$VNUM3"
echo "Updating $VERSION to $NEW_TAG"
#get current hash and see if it already has a tag
GIT_COMMIT=`git rev-parse HEAD`
NEEDS_TAG=`git describe --contains $GIT_COMMIT`
#only tag if no tag already (would be better if the git describe command above could have a silent option)
if [ -z "$NEEDS_TAG" ]; then
echo "Tagged with $NEW_TAG (Ignoring fatal:cannot describe - this means commit is untagged) "
git tag $NEW_TAG
git push --tags
else
echo "Already a tag on this commit"
fi
này hoạt động ví dụ nếu bạn có:
- một chi nhánh tổng thể: sẽ tạo thạc sĩ-XYZ
- một thông cáo/XY: sẽ tạo ra XYZ
Trong mọi trường hợp cảm ơn rất nhiều nó đã giúp tôi rất nhiều.
Điều này có được kích hoạt bởi móc git (nếu có, cái nào?), hay bạn chạy thủ công này thay vì 'git push'? – Gady
Nó chỉ nằm trong tệp .sh mà tôi chạy thủ công (nhưng tệp .sh cũng được chạy tự động như là một phần của bản dựng Jenkins trong đó dự án luôn cần bản cập nhật cho số phiên bản). Nó có thể có thể được thêm vào một cái móc bằng cách nào đó (tôi không thực sự biết nhiều về git móc phải trung thực vì vậy không thể giúp tôi có!) – timhc22
Thêm '2>/dev/null' vào cuối' git description --contains $ GIT_COMMIT' để xóa cảnh báo "gây tử vong". Cảm ơn kịch bản – koxon