Vì vậy, tôi có một tải các thư mục phát hành, trong đó các thư mục đó có thể được kiểm tra từ một trong một số repos khác nhau và có thể là nhánh dev, qa hoặc master hoặc có thể là bản phát hành sản xuất, được kiểm tra từ thẻ và thẻ có thể là chú thích hay không. Tôi có một đoạn script sẽ xem thư mục đích và nhận lại câu trả lời trong mẫu -. Vấn đề là các phiên bản khác nhau của git trả lại trạng thái khác nhau 'để kiểm tra thẻ.
Vì vậy, tôi thấy git show-ref --tags
làm việc ban đầu, ngoại trừ các thẻ chú thích. Tuy nhiên, việc thêm -d đã thêm một mục riêng vào danh sách các thẻ, một cho thẻ, một cho chú thích (cam kết chú thích được xác định là ^ {} mà tôi đã loại bỏ bằng sed).
Vì vậy, đây là cốt lõi của kịch bản của tôi, cho bất cứ ai muốn nó: -
REPO=`git --git-dir=${TARGET} remote show origin -n | \
grep "Fetch URL:" | \
sed -E "s/^.*\/(.*)$/\1/" | \
sed "s/.git$//"`
TAG=`git --git-dir=${TARGET} show-ref -d --tags | \
grep \`git --git-dir=${TARGET} show --quiet --format=format:%H HEAD\` | \
cut -d\ -f2 | \
cut -d/ -f3 | \
sed "s/\^{}$//"`
if [ "${TAG}" == "" ] ; then
BRANCH=`git --git-dir=${TARGET} show-ref --heads | \
grep \`git --git-dir=${TARGET} show --quiet --format=format:%H HEAD\` | \
cut -d\ -f2 | \
cut -d/ -f3`
TAG=${BRANCH}
fi
git show-ref
sha của thẻ, không phải sha của sửa đổi repo. $ Git show-ref thử nghiệm 08b9c774ab20e5bdb638339cf4ea2c124b0dae54 refs / tags / kiểm tra $ git thử nghiệm kiểm tra ĐẦU hiện tại là c7f8831 ... $ git checkout 08b9c77 ĐẦU hiện tại là c7f8831 ...