2015-09-15 8 views
17

Travis CIの "git clone"ステップをカスタマイズ/オーバーライドする方法はありますか?</p> <p><code>git clone --depth=50 --branch=master https://github.com/user/repo.git user/repo </code></p> <p>どのように私はこれを上書き/カスタマイズすることができます。これに似インストールステップ、トラヴィスCIクローンレポ、オン


背景:タグベースのデプロイを使用しています。 Travisがタグ付きビルドをチェックアウトする方法(--branch=<tagname>)、gitリポジトリはブランチへのアクセスなしで分離状態になります。しかし、展開のために、私はどのブランチにいるのかを知る必要があります。私の解決策は、 "通常の"クローンを行い、タグ付きコミットに切り替えることです。

答えて

11

インストール手順でを再度クローンすることができます。そうすることで、リポジトリを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 
+1

sshでプライベートレポを再クローニングする場合は、 'git clone [email protected]ub.com:$ {TRAVIS_REPO_SLUG} .git'を使用してください。 –

0

既存のシャロークローンを完全なクローンに変換することができます。これを実行するには、インストール手順中にgit fetch --unshallow(gitバージョン1.8.3以降で利用可能)を実行します。彼らはチェックアウトのブランチに属していない場合でも、

# .travis.yml 
install: 
    - git fetch --unshallow --tags 

--tagsフラグ軍はすべてのタグをフェッチします。これは、ビルドが他のブランチからのタグにも依存する場合に必要です。

+4

Travisは '--single-branch'を意味する' --depth'でリポジトリをクローンするので動作しません。 'git fetch'はクローンされたブランチだけをフェッチします。 –

1

問題は、あなたが離れた枝にいるということではありません。 gitではタグを取得できません。git fetch --tagsは、指定したgit cloneコマンドで--branchで指定されたブランチのみをフェッチします。

私はこれをより詳細に説明します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} 
1

それともリモートを照会できます。 .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の達人は既にこの1を思い付くしていなかったことに驚いています)

+0

これは素晴らしいです、ありがとう! – matthewcummings516

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`" 
1

私はあなたの全体のレポへのアクセスを得るために、あなたは以下を必要とすることがわかった:

install: 
    - git config remote.origin.fetch +refs/heads/*:refs/remotes/origin/* 
    - git fetch --unshallow --tags 

こうすることで、リモートブランチやタグにアクセスできるようになります(例えば、チェックアウトを行うこともできます)。

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 

注:git symbolic-ref --short HEADはあなたがタグにしているが、もはやあなたは(this discussionによる)タグを指す新しいブランチを作成することができデタッチHEAD状態になりたいしない場合

HEAD状態になっていると失敗します。

関連する問題

 関連する問題