Travis CIでgit diffのような現在ブランチと別のブランチを比較して差分のみを扱うようなコマンドを書いた場合に次のようなエラーとなる場合があります。
# 変更されたファイルのみを扱う
> git diff --name-only --diff-filter=ACMR origin/develop | echo
fatal: ambiguous argument 'origin/develop': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'
ローカルでは起きなくて、Travis CIのみで起きるのはそもそもTravis CIはデフォルトでリポジトリを
shallow cloneしているからです。
$ git clone --depth=50 --branch=2015-09-29JavaScript https://github.com/jser/jser.github.io.git jser/jser.github.io
という感じで、--depth
を付けて一部だけcloneしています。
そのため、Travis CIでcloneした直後は、--branch=
で指定したブランチのみで、master
などが存在しないようになっています。
なのでgit diff --name-only --diff-filter=ACMR origin/develop
というように、現在ブランチとorigin/develop
を比較しようとするとそんなブランチがないと言われます。
修正方法
一部しかcloneしてないので、全部fetch
するようにすれば問題なくなるはずです。
なので、.travis.yml
でgit fetch --unshallow
で全部fetchするようにしておけば問題なくなります。(その代わり全部ダウンロードするので遅くはなります)
before_install:
- git fetch --unshallow
参考