Cron 作業檢查 Git 儲存庫中的更改
我們剛剛將伺服器配置移至 Git 儲存庫。因此,任何儲存庫文件夾中都不應該有任何更改。我在考慮如何設置一個 cron 作業來檢查任何未送出的更改。
如何設置 cron 作業來檢查 Git 儲存庫中的更改?
Greping
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 文件。除了伺服器配置之外,還有用於內容的 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-tree
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
如果有更改,這將每分鐘發送一封電子郵件。如果您想要不同的設置,我建議您查看Wikipedia 頁面中的範例
cron
。為什麼
git-ls-files
?我推薦的原因
git ls-files
是git status
這git status
是一個所謂的“瓷器”命令,git ls-files
而是一個“管道”命令。簡而言之,瓷器命令是為輸出給使用者而設計的,而管道命令是為腳本設計的。閱讀更多關於 git 瓷器和 git 管道命令之間的差異。