在安装步骤中,Travis CI克隆了repo,其外观类似于:
git clone --depth=50 --branch=master https://github.com/user/repo.git user/repo
如何自定义/覆盖?
背景:我正在使用基于标签的部署。 Travis检查标记构建(--branch=<tagname>
)的方式,git存储库处于分离状态而无法访问分支。但是,对于部署,我需要知道我是哪个分支。我的解决方案是执行“普通”克隆,然后切换到标记的提交。
答案 0 :(得分:13)
您可以在安装步骤中再次克隆存储库 。这样你就可以两次克隆存储库,但它似乎有效。
# .travis.yml
install:
- git clone https://github.com/$TRAVIS_REPO_SLUG.git $TRAVIS_REPO_SLUG
- cd $TRAVIS_REPO_SLUG
- git checkout -qf $TRAVIS_COMMIT
答案 1 :(得分:3)
我发现为了访问您的整个仓库,您需要以下内容:
install:
- git config remote.origin.fetch +refs/heads/*:refs/remotes/origin/*
- git fetch --unshallow --tags
这样您就可以访问远程分支和标签(例如可以结帐)。
如果你在标签上但又不想处于分离的HEAD状态,你可以创建一个指向标签的新分支(根据this discussion):
install:
- git config remote.origin.fetch +refs/heads/*:refs/remotes/origin/*
- git fetch --unshallow --tags
- git symbolic-ref --short HEAD || git checkout -b ${TRAVIS_BRANCH}-test $TRAVIS_BRANCH
注意:如果您处于分离的HEAD状态,git symbolic-ref --short HEAD
将失败。
答案 2 :(得分:1)
问题不在于您是否处于分离的分支中。这是git不允许您获取标记:git fetch --tags
只会在您提供的--branch
命令中获取由git clone
指定的分支。
我在更详细地解释了这一点this answer。
要解决您的问题(签出特定标签),您可以在克隆回购后调用这样的脚本:
# Keep track of where Travis put us.
# We are on a detached head, and we need to be able to go back to it.
build_head=$(git rev-parse HEAD)
# fetch the tags
git config --replace-all remote.origin.fetch +refs/heads/*:refs/remotes/origin/*
git fetch --tags
# checkout the tagged commit
git checkout -qf <your tag>
# now do your stuff
# go back to where we were at the beginning
git checkout ${build_head}
答案 3 :(得分:1)
在构建期间运行此命令以访问原始标记/分支
git config remote.origin.fetch "+refs/heads/*:refs/remotes/origin/*" 1>/dev/null
git fetch origin -q
之后,您可以运行此命令来查找包含您的提交的分支
BRANCHES=`git branch -a --contains "$TRAVIS_TAG"`
我在很久以前创建了一个脚本来获取'环境'分支,其中标签是为了持续部署而创建的。
它可能会激励你:https://gist.github.com/rolebi/a0eb1f783b7f3a5f21a631c8da1582dc
使用它:
TARGET_ENV="`test $TRAVIS_TAG && bash scripts/get_branch_for_git_reference.sh $TRAVIS_TAG`"
答案 4 :(得分:1)
对于每个the Travis docs,您可以将以下内容添加到.travis.yml
中,以删除--depth
标志:
git:
depth: false
--depth
暗示--single-branch
,删除此标志意味着所有分支将被检出,这不是默认行为。
答案 5 :(得分:0)
您可以将现有的浅层克隆转换为完整克隆。为此,请在安装步骤中执行 git fetch --unshallow (自git版本1.8.3起可用)。
# .travis.yml
install:
- git fetch --unshallow --tags
- tags 标记强制获取所有标记,即使它们不属于签出的分支。如果您的构建还依赖于来自其他分支的标记,则需要这样做。
答案 6 :(得分:0)
或者你可以只查询遥控器。将以下内容添加到.travis.yml
:
env:
global:
# get all the branches referencing this commit
- REAL_BRANCH=$(git ls-remote origin | sed -n "\|$TRAVIS_COMMIT\s\+refs/heads/|{s///p}")
# or check if we are on a particular branch:
- IS_RELEASE=$(git ls-remote origin | grep "$TRAVIS_COMMIT\s\+refs/heads/release$"
(我很惊讶git guru还没有拿出这个)
答案 7 :(得分:0)
禁用this,然后在安装步骤中再次克隆存储库。这样,该存储库将仅克隆一次。在这个“ 正常”克隆中,您将可以做任何您想做的事情。
git:
clone: false
install:
- git clone https://github.com/$TRAVIS_REPO_SLUG.git $TRAVIS_REPO_SLUG
- cd $TRAVIS_REPO_SLUG