[英]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_BRANCH
或git 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.