我正在尝试使用git push
crontab 运行的 bash 脚本将提交推送到 github。在脚本的末尾,我执行以下操作:
# script processes some files, then:
git add -A
git commit -a -m "Updated $(date)"
git push origin master
添加和提交工作正常(并且从 CL 运行脚本时推送工作正常,而不是使用 cron),但是使用 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
我搜索过其他帖子(例如这, 和这),但这似乎不是 SSH 的问题(至少我尝试在 crontab 行中传递 SSH_AUTH_SOCK 环境变量,但没有起作用)。运行 OSX 10.8。
有任何想法吗?
答案1
TL;DR:通过使用 SSH 而不是 HTTPS 解决了通过 cron 进行 git push 的问题。
感谢 GitHub 的支持团队,我能够解决这个问题。
第一个问题是,git-credential-osxkeychain
当 cron 任务运行时,它不在我的路径中。对我来说,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 正在git
从运行/usr/bin
。
PATH
我在cron 作业的顶部添加了适当的目录:
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 支持团队的建议下,我git-credential-osxkeychain
通过 SSH 而不是 https 进行身份验证解决了该问题(根本不需要):
git remote set-url origin [email protected]:username/repo.git