【问题标题】:How to correctly add 'git push' command to crontab - Ubuntu如何正确地将“git push”命令添加到 crontab - Ubuntu
【发布时间】:2017-07-11 03:29:38
【问题描述】:

我相信这是一个简单的问题,但我已将文件夹添加为 Origin Masterthis guide oriented

我创建了一个文件 backupgit.cron 并在其中包含以下命令:

cd /var/bkpfolder/
git add .
git commit -m "another commit"
git push origin master

crontab -e,我在下面添加了一行:

30 * * * * /var/bkpfolder/backupgit.cron

问题是,我添加用于测试此 crontab 的(新)文件永远不会上传...如果我在 backupgit.cron 手动运行命令,它们确实可以工作。

我相信这与去origin master文件夹(cd /var/bkpfolder/?)执行推送命令有关,所以我正在寻找的是执行推送命令的正确方法到/bkpfolder/ 中声明的backupgit.cron

提前致谢!

【问题讨论】:

  • 一些事情...首先也是最重要的:捕获 cron 作业的输出。查看任何错误输出对于诊断至关重要。第二,你确定你在做什么?让 cron 工作做 git add . 对我来说似乎很危险。最后,不清楚“设置原始主文件夹”是什么意思? Origin(通常)是一个遥控器; master 是(通常)一个分支。文件夹既不是这些东西。了解您要遵循的链接文档中的哪些步骤可能会有所帮助。
  • @MarkAdelsberger,该文件夹中的所有内容都是我需要推送的文件。我完成了我提供的链接所述的所有步骤,并且我设法推动的唯一方法是遵循我在backupgit.cron 中声明的所有步骤。我不必遵循这些确切的步骤,如果有另一种方法可以定期推送所有添加到该文件夹​​的文件,这就是我的解决方案。
  • 您的出身是第一句中提到的Master 还是脚本中提到的master?也许这只是一个错字?
  • 只是master..

标签: git ubuntu cron crontab


【解决方案1】:

您的来源master 必须是裸存储库,否则分支可能不会被签出。

如果不是bare-repository并且要推送的分支已经签出,会报如下错误:

git push origin master --force
Counting objects: 3, done.
Writing objects: 100% (3/3), 214 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
remote: error: refusing to update checked out branch: refs/heads/master
remote: error: By default, updating the current branch in a non-bare repository
remote: is denied, because it will make the index and work tree inconsistent
remote: with what you pushed, and will require 'git reset --hard' to match
remote: the work tree to HEAD.
remote:
remote: You can set 'receive.denyCurrentBranch' configuration variable to
remote: 'ignore' or 'warn' in the remote repository to allow pushing into
remote: its current branch; however, this is not recommended unless you
remote: arranged to update its work tree to match what you pushed in some
remote: other way.
remote:
remote: To squelch this message and still keep the default behaviour, set
remote: 'receive.denyCurrentBranch' configuration variable to 'refuse'.
To /Users/Roman/gittest/master
! [remote rejected] master -> master (branch is currently checked out)
error: failed to push some refs to '/Users/Roman/gittest/master'

解决方案

如果您不想使用裸存储库,则必须签出您的 bkpfoldermaster 目录之间不同的分支。

开箱即用示例

为了更好地理解我将远程master重命名为origin

mkdir main_backup
cd main_backup && git init --bare && cd ..
git clone main_backup bkpfolder
cd bkpfolder && echo "This is a test" >> test.txt
git add .
git commit -m 'Automatic backup'
git push origin master

【讨论】:

  • 命令git push origin master 仅在我在/var/bkpfolder/ 内时才有效,我不确定我是否按照我的意图去做......考虑到我不是一个git专家,我刚收到一个网址,我在bkpfolder 时设置为remote repository
  • bkpfolder 是您要备份的文件夹,并且您要将更改推送到您的master 目录,即远程origin
  • 对...我该怎么做?
【解决方案2】:

我发现我做错了什么...正如我所说,backupgit.cron 中的命令在我位于文件夹中时起作用(读取为不是默认文件夹 crontab)...所以我只是想在gitcommand 的开头,我可以指定我的操作文件夹,如git -C /var/bkpfolder/

所以我替换了backupgit.cron 来自:

的内容
cd /var/bkpfolder/
git add .
git commit -m "another commit"
git push origin master

收件人:

git -C /var/bkpfolder/ add .
git -C /var/bkpfolder/ commit -m "another commit"
git -C /var/bkpfolder/ push origin master

+

添加了读取/写入 crontab 被写入的用户文件的权限

【讨论】:

  • 看看我的例子。你不需要添加-C /var/bkpfolder
  • 只有当我在新的“main_backup”中时,您的解决方案才对我有用……除非我使用-Ccommand 指定文件夹:/
  • 但对我来说,它错过了密码处理
  • @Mahefa,我相信您可以为用户存储您的 git 凭据。登录后,请尝试以下回复:stackoverflow.com/questions/35942754/…
  • @mrbTT > 谢谢。我已经删除了密码,因为我可以。当我遇到无法删除密码的情况时,我会试试这个
猜你喜欢
  • 2011-10-13
  • 1970-01-01
  • 1970-01-01
  • 2015-10-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-27
  • 1970-01-01
相关资源
最近更新 更多