LoginSignup
17
14

More than 5 years have passed since last update.

CIするためだけに一時的なブランチ名でgit pushする

Last updated at Posted at 2016-04-17

Travis CIやCircleCIのテストを全部パスしてからgit pushしたいけど、git pushしないとCIが動かない、どうしたらいいんだ?とお悩みの方はいらっしゃいませんか?実は、履歴を汚さずにCIする方法があるんです。手元のcommitを本来のブランチではなく一時的な別ブランチにpushすればいいんです。

Travis CIやCircleCIでは特に設定しない限り全ブランチのpushに対してCIが走るので、別ブランチへのpushでもテスト結果を確認することができます。無事にテストをパスしたら改めて本来のブランチにpushすれば良いでしょう。

以下に例を示します。たとえばmasterブランチにcommitしたけどまだpushしていない状況としましょう。ここで次のようにすればローカルのmasterブランチをリモートの新たなブランチにpushすることができます。

$ git push origin master:implement-foobar-20160418

ブランチ名指定の部分は次のような記法になっています。

<ローカルブランチ名>[:<リモートブランチ名>]

普段はローカルブランチ名とリモートブランチ名が同じなので、:以下を省略して記述していたというわけです。

無事にテストに成功したら、この一時的なブランチは削除してしまいましょう。次のようにローカルブランチ名に空文字を与えてpushするとリモートブランチが削除できます。

$ git push origin :implement-foobar-20160418

これで歴史を汚さずに実験し放題というわけです。やったね!

他の利用シーン

たとえばMarkdownファイルをコミットするような場合でも、GitHub Flavored Markdownの見栄えってpushしてみないとわからなかったりするので、別ブランチを使うのはアリかなと思います。

特定の名前のブランチに対してCIしない設定

ブランチ名によってCIするかどうかを切り替える方法も示します。1リポジトリで複数のCIサービスを使っているような場合は特に有用でしょう。

Travis CIの場合

.travis.yml
branches:
  except:
    - gh-pages
    - /^circleci-.*$/
    - /^wercker-.*$/

only:でホワイトリスト設定もできます。(参考:Whitelisting or blacklisting branches

CircleCIの場合

circle.yml
general:
  branches:
    ignore:
      - gh-pages
      - /^travisci-.*$/
      - /^wercker-.*$/

only:でホワイトリスト設定もできます。(参考:Specifying branches to build

Werckerの場合

設定ファイルに書く方法は無さそうです。Webコンソールの「Settings」「Options」「Ignored branches」からブランチ名のブラックリスト設定ができます。

17
14
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
17
14