web-dev-qa-db-ja.com

gitMacのcron経由でgithubにプッシュ

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

他のスレッド( thisthis など)を検索しましたが、SSHの問題ではないようです(少なくともSSH_AUTH_SOCK環境変数を渡してみました) crontab行で、それは機能しませんでした)。 OSX10.8を実行しています。

何か案は?

7
Stephen Turner

TL; DR:HTTPSの代わりにSSHを使用してcron経由でgit Pushの問題を解決しました。

GitHubのサポートチームのおかげで、これを解決することができました。

最初の問題は、cronジョブの実行時にgit-credential-osxkeychainが私のパスになかったことです。私の場合、gitgit-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
7
Stephen Turner