我们刚刚将我们的服务器configuration移到了Git存储库。 因此,任何存储库文件夹都不应该有任何更改。 我正在考虑如何设置一个cron作业来检查是否有任何未改变的变化。
如何设置cron作业来检查Git存储库中的更改?
格式化git status
命令的输出可能就是这样做的。 Grep和cron工作并不是我的强项。 以下是git status
一些示例输出:
站在包含git仓库(例如/path/gitrepo/
)的文件夹中:
$ git status # On branch master # Changes not staged for commit: # (use "git add <file>..." to update what will be committed) # (use "git checkout -- <file>..." to discard changes in working directory) # # modified: apache2/sites-enabled/000-default # # Untracked files: # (use "git add <file>..." to include in what will be committed) # # apache2/conf.d/test no changes added to commit (use "git add" and/or "git commit -a")
站在文件夹里的时候没有什么变化 :
$ git status # On branch master nothing to commit (working directory clean)
更新:
与起源同步并不重要。 不应该有本地的变化。 必须在位的本地文件进入.gitignore文件。 除了服务器configuration,还有内容的git仓库(静态网站,networking应用程序,wordpress等)。 没有一个仓库应该有本地的变化。
自从用于Web应用程序的开发之后,我们可能会长期使用Puppet。
git ls-files
-m
标志将获得自上次提交以来所有已修改文件的列表。 如果没有文件被修改 ,则不输出数据 。 这使得使用这个命令设置cronjob非常容易,因为cronjob默认只会在命令输出时发送邮件 。
删除的文件是公关。 定义修改 ,所以他们也将在修改视图中显示。 如果你使用git ls-files -m -d
,删除的文件将被列出两次。
但是请注意, git ls-files -m
只会显示修改过的文件,因此会忽略未跟踪的文件。 为了显示未跟踪的文件,您需要传递“其他文件”的-o
标志以及传递选项--exclude-standard
来排除.gitignore
和.git/info/exclude
列出的文件。
从cronjob运行命令时,需要分别使用--git-dir
和--work-tree
指定.git
目录和工作树的path。 请参阅git
手册页以供参考。
你需要在你的cronjob中运行完整的命令:
$ git --git-dir "/PATH/TO/DIR/.git" --work-tree "/PATH/TO/DIR" ls-files -m -o --exclude-standard
你的crontab应该是这样的:
$ crontab -l #mh dom mon dow命令 * * * * * git --git-dir“/PATH/TO/DIR/.git”--work-tree“/ PATH / TO / DIR”ls-files -m -o --exclude-standard
如果有变化,这将每分钟发送一个电子邮件。 如果你想要一个不同的设置,我build议你查看维基百科上的cron
页面的例子 。
git-ls-files
? 我推荐git ls-files
over git status
是git status
是一个所谓的“瓷器”命令,而git ls-files
是一个“plumbing”命令。 简而言之,瓷器命令是为输出给用户而devise的,而pipe道命令是为脚本devise的。 阅读更多关于git瓷器和gitpipe道命令的区别。
在你的问题中你忽略了很多复杂性,所以我会在我的答案中忽略它:
if [ `git status | grep -c "working directory clean"` -ne 1 ]; then . . . you have changes . . . else . . . you don't have any changes . . . fi
但是请注意,这不会告诉您是否同步了,或者本地更改是否合法,或者是您想知道是否有更改。
使用像Puppet或Chef这样的configurationpipe理工具来处理你的configuration文件可能会更好 – 学习曲线起初可能有点陡峭,但是它们极大地简化了服务器/configurationpipe理。