繁体   English   中英

github 远程标签推送,无需克隆 repo

[英]github remote tag push without cloning repo

如何在 github 中编辑标签,而不从命令行克隆 repo?

下面的示例显示了如何在不克隆 repo 的情况下列出远程标签:

 $ git ls-remote --tags https://<TOKEN>@github.com/user/repo.git
 # 0afdaf971...09a  refs/tags/tagname

如何像上面的示例一样远程编辑/添加/删除新标签,而无需克隆存储库?

git push origin :tagname

需要克隆 repo。

有没有办法在不克隆回购的情况下实现它?

@xerx593

感谢您指出正确的方向,这是解决方案:

curl --user "username:password" --data '{"tag_name":"v1.1","target_commitish":"master"}' \
-X POST https://api.github.com/repos/:owner/:repo/releases

我想出了如何在 git 中以通用方式执行此操作(将来可能会中断)。

使用以下变量:

BRANCH_NAME # I think this can be anything
REPOSITORY_URL
COMMIT_HASH # The commit to tag
TAG_NAME # The name of the tag

要使git push工作,您需要创建一个.git目录,如下所示:

mkdir -p .git/objects .git/refs
echo 'ref: refs/heads/$BRANCH_NAME' > .git/HEAD
printf '[remote "origin"]\n    url = $REPOSITORY_URL'

此外,您需要在对象目录中有一个“提交”object。 该文件包含一些难以传输和重新创建的信息。 将文件复制过来更容易(它是一个小文件)。 以下将获取文件:

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/objects/${COMMIT_HASH:0:2}/${COMMIT_HASH:2}目录中的新存根 git 存储库。

然后在新的存根 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

这个也找到了。 如果要标记的提交是特定分支的最新提交,则只能下载该提交,如下所示:

git clone --bare --single-branch --branch $BRANCH_NAME --depth=1 --filter=tree:0 --filter=blob:none --filter=object:type=commit $REPOSITORY_URL .git

这需要更高版本的 git 支持--filter--filter=object:type=commit 除了提交之外,这似乎还下载了hooks目录,在我的存储库中是 40k(我认为这是一个空的 hooks 列表)。

然后你可以像往常一样标记它:

git push origin +$BRANCH_NAME:refs/tags/${TAG_NAME}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM