在不克隆存储库的情况下将 Github 远程标签推送

3

如何在GitHub上编辑标签,而无需从命令行克隆存储库?

以下示例显示如何列出远程标签,而无需克隆存储库:

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

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

需要克隆仓库。

有没有不克隆仓库就能实现的方法?


可能是在GitHub存储库中创建标签的重复问题。 - xerx593
通过GitHub的Web界面创建标签要通过GitHub的Web界面创建标签,您可以按照以下步骤操作:
  1. 在您的存储库页面上导航到"Tags"选项卡。
  2. 单击"Create new tag"按钮。
  3. 输入标签名称和标签消息。
  4. 选择一个基于现有分支的提交或输入特定的提交SHA。
  5. 单击"Create tag"按钮。
这样就可以在GitHub的Web界面上创建新的标签了。请注意,您需要具有适当的权限才能执行此操作。
- xerx593
谢谢您的回答,但我需要从命令行获取它。 - Mike S.
1
那么你必须克隆!(否则你想打什么标签?..一个(非)空文件夹/存储库吗?)当然,解决方法是:“从cmd调用github”(使用curl,当其他方法失败时)。 - xerx593
我们需要详细阐述,但是从这里开始:这里(GitHub REST API文档!部分:创建发布 :) - xerx593
显示剩余3条评论
3个回答

2

@xerx593

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

最初的回答:

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

0
我发现如何在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'

此外,您需要在对象目录中拥有一个“提交”对象。该文件包含一些难以转移和重新创建的信息。最简单的方法是将文件复制过去(它是一个小文件)。以下是获取文件的方法:
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

0

我也发现了这个问题。如果你想要标记的提交是特定分支的最新提交,你可以像这样仅下载该提交:

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

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

然后您可以像往常一样对其进行标记:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接