繁体   English   中英

Git结帐分支或来自多个遥控器的标签

[英]Git checkout branch or tag from multiple remotes

我有一个从上游构建传递过来的参数,可以说$GIT_BRANCH

它的值可以表示git标签或git分支。 我还传递了一个$GIT_REMOTE ,它允许我计算获取和结帐路径的来源。

始终假定我在以下任何评论之前运行此命令。

git fetch $GIT_REMOTE --tags

如果$ GIT_BRANCH实际上是一个分支,则其超级简单的git checkout remotes/$GIT_REMOTE/$GIT_BRANCH 给定遥控器已经存在。

如果$ GIT_BRANCH表示标签,则将面临以下错误:

error: pathspec 'remotes/origin/1.1.0' did not match any file(s) known to git.

调查refspec会告诉您,仅存在“远程标记” ref / tags这样的事情。

这意味着,如果我能够以某种方式分辨出$GIT_BRANCH是否是标签或分支,我可以正确定向cmd使其变得简单。

git checkout tags/$GIT_BRANCH

有人能够以此为基础吗? 建议替代方案? 甚至根据我的建议提出一种可靠地做到这一点的方法? 我对branch_names与标记名称冲突可能会引起一些边缘情况感到担忧。

对于分支,您可以使用git checkout remotes/$GIT_REMOTE/$GIT_BRANCHgit checkout $GIT_REMOTE/$GIT_BRANCH

但是对于标签,您应该直接使用git checkout $GIT_BRANCH 由于您已经使用git fetch $GIT_REMOTE --tags.git/refs/tags本地获取.git/refs/tags ,因此您可以直接检出它们。

您可以使用shell脚本来检测参数$GIT_BRANCH是否为branch:

#!/bin/sh


if [ `git branch | grep $GIT_BRANCH` ]
then
    echo "it's branch"
else
    echo "it's tag"
fi
#!/bin/bash
git fetch origin --tags
if git show-ref -q --verify "refs/tags/$GIT_BRANCH" 2>/dev/null; then
    git checkout refs/tags/$GIT_BRANCH
else
    git checkout remotes/$GIT_REMOTE/$GIT_BRANCH 
fi

暂无
暂无

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

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