如何使用 cron 自动提交到我的 git 存储库?

如何使用 cron 自动提交到我的 git 存储库?

我看了很多答案关于这个主题,但这里有些不对劲,让我解释一下。我创建了这个脚本,让我cron更清洁 :)

#!/bin/bash

cd /home/valter.silva/Development/git/valter/ 
/usr/bin/git add -A 
/usr/bin/git commit -am "update `date`"
/usr/bin/git push

然后将其添加到我的 cron 中valter.silva's cron不是我的root cron

00 * * * * /home/valter.silva/Development/git/valter/scripts/git/sync.sh

重启我的 cron

sudo service cron restart
cron stop/waiting
cron start/running, process 6047

然后..什么都没发生..

但是如果我在命令行中执行我的脚本,一切都会正常工作。我知道,有时如果你没有将整个路径放在 cron 脚本中,它将无法正常工作。我应该使用我的 cron 来执行此操作,而不是 root 的 cron。

那么这里出了什么问题?有什么想法吗?谢谢!

更新

我按照 Terdon 的建议记录了操作,但看起来一切都正常,但过程却不是push这样。为什么?

[master ad5d001] update Fri Aug  9 11:00:01 BRT 2013
 9 files changed, 1224 insertions(+), 364 deletions(-)
 create mode 100644 scripts/centreon/4.answers~
 create mode 100644 scripts/centreon/6.importing database
 create mode 100644 scripts/centreon/6.importing database~
 create mode 100755 scripts/centreon/7.upgrade.sh
 create mode 100755 scripts/centreon/7.upgrade.sh~
 create mode 100644 scripts/centreon/8.answers
 create mode 100644 scripts/centreon/8.answers~
# On branch master
# Your branch is ahead of 'origin/master' by 1 commit.
#
nothing to commit (working directory clean)
# On branch master
# Your branch is ahead of 'origin/master' by 1 commit.
#
nothing to commit (working directory clean)
# On branch master
# Your branch is ahead of 'origin/master' by 1 commit.
#
nothing to commit (working directory clean)
# On branch master
# Your branch is ahead of 'origin/master' by 1 commit.
#
nothing to commit (working directory clean)

答案1

另外,我简化了链接,这样对于那些寻找答案的人来说更容易阅读huti 的博客文章

因此,对于您的推动sync.sh,我想补充-u origin master一点:

#!/bin/bash

cd /home/valter/git-project/
/usr/bin/git add -A 
/usr/bin/git commit -am "Daily update"
/usr/bin/git push -u origin master

确保您的脚本可以通过 bash 执行:

sudo chmod 765 ~/sync.sh

然后您可以添加一行到/etc/crontab

sudo nano /etc/crontab # To edit the file
01 18  *  *  * root  /home/valter/sync.sh

确保重新启动以使 cron 任务生效,现在您的脚本将每天 18:01 运行。如果没有修改,则不会推送任何内容。

答案2

我不是 git 大师,但我在本地 git test repo 上做了一些 git 测试。当我运行 git push 时,输出如下:

fatal: No configured push destination.
Either specify the URL from the command-line or configure a remote repository using

git remote add <name> <url>

and then push using the remote name

git push <name>

问:您是否使用命令配置了远程存储库git remote add?如果是,请尝试使用远程存储库名称运行 git push。如果没有,请配置一个,或者在命令行上使用带有远程存储库 URL 的 git push ( git push git://host.xz[:port]/path/to/repo.git/)。

答案3

为什么你会期望发生某些事情?你已经被告知cron每小时整点运行你的脚本。如果你在 13:02 修改了 crontab,那么直到 14:00 才会发生任何事情。

尝试等待一段时间,直到时间到了XX:00,你的脚本应该会运行。哦,不需要重新启动cron,它会读取新的 crontab 并在下次运行时运行它。

如果您等待的时间足够长并且脚本仍然没有运行,请尝试重定向错误输出以检查是否发生了任何事情:

00 * * * * /home/valter.silva/Development/git/valter/scripts/git/sync.sh 2> /home/valter.silva/error.txt

还可以尝试设置一个虚拟的 cron 作业来查看是否有效:

00 * * * * date > /home/valter.silva/date.txt

相关内容