Monitoring

Cron 作業檢查 Git 儲存庫中的更改

  • September 18, 2012

我們剛剛將伺服器配置移至 Git 儲存庫。因此,任何儲存庫文件夾中都不應該有任何更改。我在考慮如何設置一個 cron 作業來檢查任何未送出的更改。

如何設置 cron 作業來檢查 Git 儲存庫中的更改?

Grepinggit 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 文件。除了伺服器配置之外,還有用於內容的 git repos(靜態網站、網路應用程序、wordpress 等)。任何儲存庫都不應該有本地更改。

從長遠來看,我們可能會使用 Puppet,因為它被用於開發其中一個 Web 應用程序。

你應該使用git ls-files

-m標誌將獲得自上次送出以來所有*修改文件的列表。如果沒有文件被修改,則不輸出數據*。這使得使用此命令設置 cronjob 變得非常容易,因為預設情況下,cronjob 僅在命令輸出時才會發送郵件

刪除的文件是 pr。定義已修改,因此它們也將顯示在修改後的視圖中。如果這樣做git ls-files -m -d,已刪除的文件將列出兩次。

但是請注意,這git ls-files -m只會顯示 files modified,因此會忽略未跟踪的文件。為了也顯示未跟踪的文件,您需要傳遞-o“其他文件”的標誌,以及傳遞排除在和中--exclude-standard列出的文件的選項。.gitignore``.git/info/exclude

指定 git 目錄和工作樹

從 cronjob 執行命令時,您需要分別使用和指定.git目錄的路徑和工作樹。請參閱手冊頁以供參考。--git-dir``--work-treegit

定時任務設置

您需要在 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

如果有更改,這將每分鐘發送一封電子郵件。如果您想要不同的設置,我建議您查看Wikipedia 頁面中的範例cron

為什麼git-ls-files

我推薦的原因git ls-filesgit statusgit status是一個所謂的“瓷器”命令,git ls-files而是一個“管道”命令。簡而言之,瓷器命令是為輸出給使用者而設計的,而管道命令是為腳本設計的。閱讀更多關於 git 瓷器和 git 管道命令之間的差異。

引用自:https://serverfault.com/questions/400297