我发现如何在git中以一般方式完成这个(这可能会在未来出现问题)。
使用以下变量:
BRANCH_NAME
REPOSITORY_URL
COMMIT_HASH
TAG_NAME
为了使git push
正常工作,您需要按照以下步骤创建一个.git
目录:
mkdir -p .git/objects .git/refs
echo 'ref: refs/heads/$BRANCH_NAME' > .git/HEAD
printf '[remote "origin"]\n url = $REPOSITORY_URL'
此外,您需要在对象目录中拥有一个“提交”对象。该文件包含一些难以转移和重新创建的信息。最简单的方法是将文件复制过去(它是一个小文件)。以下是获取文件的方法:
mkdir -p output_directory/objects/${COMMIT_HASH:0:2}/
cp .git/objects/.git/objects/${COMMIT_HASH:0:2}/${COMMIT_HASH:2} output_directory/objects/${COMMIT_HASH:0:2}/${COMMIT_HASH:2}
当你准备好后,你可以将这个文件复制到新的存根 git 仓库中的 .git/objects/${COMMIT_HASH:0:2}/${COMMIT_HASH:2}
目录。
然后在新的存根 git 目录中,像这样推送新标签:
git push +${COMMIT_HASH}:refs/tags/${TAG_NAME}
记得设置你的git凭证。可以按照以下步骤完成:
git config credential.helper store
echo "https://$GIT_USERNAME:$GIT_PASSWORD@$GIT_REPOSITORY_DOMAIN" > ~/.git-credentials