インストール手順では、Travis CIは次のようなリポジトリのクローンを作成します。
git clone --depth=50 --branch=master https://github.com/user/repo.git user/repo
これをカスタマイズ/オーバーライドするにはどうすればよいですか?
背景:タグベースのデプロイを使用しています。 Travisがタグ付きビルドをチェックアウトする方法(--branch=<tagname>
)、gitリポジトリはデタッチされた状態で、ブランチにアクセスできません。ただし、展開では、自分がどのブランチにいるかを知る必要があります。私の解決策は、「通常の」クローンを作成してから、タグ付きコミットに切り替えることです。
インストール手順でリポジトリ再びを複製できます。この方法では、リポジトリを2回複製しますが、動作するようです。
# .travis.yml
install:
- git clone https://github.com/$TRAVIS_REPO_SLUG.git $TRAVIS_REPO_SLUG
- cd $TRAVIS_REPO_SLUG
- git checkout -qf $TRAVIS_COMMIT
Travis docs ごとに.travis.yml
に以下を追加して --depth
フラグを削除できます。
git:
depth: false
--depth
は--single-branch
を意味するため、このフラグを削除すると、allブランチがチェックアウトされますが、これはデフォルトの動作ではありません。
リポジトリ全体にアクセスするには、次のものが必要であることがわかりました。
install:
- git config remote.Origin.fetch +refs/heads/*:refs/remotes/Origin/*
- git fetch --unshallow --tags
これにより、リモートのブランチやタグにアクセスできるようになります(たとえば、チェックアウトを実行できます)。
タグを使用しているが、切り離された状態にしたくない場合HEAD状態にするには、タグを指す新しいブランチを作成できます( この説明に従って )。 ):
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
は失敗します。
ビルド中にこれを実行して、Originタグ/ブランチにアクセスします
git config remote.Origin.fetch "+refs/heads/*:refs/remotes/Origin/*" 1>/dev/null
git fetch Origin -q
その後、このコマンドを実行して、コミットを含むブランチを見つけることができます
BRANCHES=`git branch -a --contains "$TRAVIS_TAG"`
ずっと前に、継続的なデプロイメントの目的でタグが作成された「environment」ブランチをフェッチするためのスクリプトを作成しました。
それはあなたに刺激を与えるかもしれません: https://Gist.github.com/rolebi/a0eb1f783b7f3a5f21a631c8da1582dc
そのように使用してください:
TARGET_ENV="`test $TRAVIS_TAG && bash scripts/get_branch_for_git_reference.sh $TRAVIS_TAG`"
問題は、あなたが独立したブランチにいるということではありません。それはgitがタグをフェッチすることを許可していないということです:git fetch --tags
は指定した--branch
コマンドのgit clone
で指定されたブランチのみをフェッチします。
これについて詳しく説明します この答え 。
問題を解決するには(特定のタグをチェックアウトする)、リポジトリが複製された後、次のようなスクリプトを呼び出すことができます。
# 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}
または、リモートにクエリを実行することもできます。以下を.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の達人がまだこれを考え出していないことに驚いています)
既存の浅いクローンを完全なクローンに変換できます。これを行うには、インストール手順中にgit fetch --unshallow(gitバージョン1.8.3以降で使用可能)を実行します。
# .travis.yml
install:
- git fetch --unshallow --tags
-tagsフラグは、タグがチェックアウトされたブランチに属していない場合でも、すべてのタグを強制的にフェッチします。これは、ビルドが他のブランチのタグにも依存している場合に必要です。