Crontabによって実行されているbashスクリプトでgit Push
を使用して、コミットをgithubにプッシュしようとしています。スクリプトの最後で、私はこれを行っています:
# script processes some files, then:
git add -A
git commit -a -m "Updated $(date)"
git Push Origin master
追加とコミットは正常に機能します(また、cronを使用せずにCLからスクリプトを実行すると、プッシュは正常に機能します)が、cronを使用したgithubへのプッシュでエラーが発生します。
git: 'credential-osxkeychain' is not a git command. See 'git --help'.
fatal: could not read Username for 'https://github.com': Device not configured
他のスレッド( this 、 this など)を検索しましたが、SSHの問題ではないようです(少なくともSSH_AUTH_SOCK環境変数を渡してみました) crontab行で、それは機能しませんでした)。 OSX10.8を実行しています。
何か案は?
TL; DR:HTTPSの代わりにSSHを使用してcron経由でgit Pushの問題を解決しました。
GitHubのサポートチームのおかげで、これを解決することができました。
最初の問題は、cronジョブの実行時にgit-credential-osxkeychain
が私のパスになかったことです。私の場合、git
とgit-credential-osxkeychain
はどちらもXcodeコマンドラインツールディレクトリから実行されていました。
$ which git
/Applications/Xcode.app/Contents/Developer/usr/bin/git
$ which git-credential-osxkeychain
/Applications/Xcode.app/Contents/Developer/usr/bin/git-credential-osxkeychain
Cronからwhich git
を実行すると、cronは/usr/bin
からgit
を実行していたことがわかります。
Cronジョブの先頭にあるPATH
に適切なディレクトリを次のように追加しました。
export PATH=$PATH:/Applications/Xcode.app/Contents/Developer/usr/bin
これでgit: 'credential-osxkeychain' is not a git command
エラーは解決しましたが、さらに別のエラーが発生しました。
fatal: could not read Username for 'https://github.com': Device not configured
GitHubサポートチームの提案で、httpsではなくSSHを介して認証することで、問題を解決しました(git-credential-osxkeychain
はまったく必要ありません)。
git remote set-url Origin [email protected]:username/repo.git