如何使用 git 或其他 VCS 對在應用程序執行時更改的伺服器配置文件進行版本控制?
我正在執行 Minecraft 伺服器 (craftbukkit),並且我還有其他幾個管理員想要訪問修改伺服器配置文件。我跟踪他們的所有更改很重要,所以很自然地,git 似乎是一個不錯的選擇。
請注意,這個問題可能與許多情況有關,它並不特定於 Minecraft。
有幾個關於使用 git 管理網站的教程。最常見的解決方案似乎是使用post-receive 掛鉤對 web 目錄執行結帳操作。但是,在我的情況下,這會帶來一些問題。
首先,管理員需要編輯的一些文件在執行時由伺服器更改。我假設如果我將伺服器目錄本身放入儲存庫,這會使 git 感到困惑。如果我是正確的(我仍在學習 git),使用收貨後結帳解決方案,這將不會有問題。
我還需要將伺服器所做的更改推送到儲存庫中,以便管理員可以將這些更改提取到他們的本地儲存庫中。我見過使用inotifywait的解決方案,但這些似乎都只考慮單個文件更改。我的伺服器有 50-80 個配置文件,當伺服器執行時更改它們時,我需要跟踪和自動送出這些文件。處理這個問題的最佳方法是什麼?
請注意,使用 git 不是必需的。我只是喜歡我到目前為止使用的東西。如果有更好的工具來完成這項工作,我願意使用它,只要它是使用者友好的。請注意,我的伺服器管理員不是程序員,也不是 Linux 高級使用者,因此使用者友好性很有幫助。
我最初在 StackOverflow 上發布了這個,但被告知它更適合這裡。
這不是一個完整的答案,但希望有一些有用的想法:
inotifywait可以很好地處理多個文件,並且可以遞歸地在目錄上設置觀察點。例如,我可以執行:
inotifywait -m -r -e close_write /etc
/etc/passwd
並在編輯和後得到以下日誌/etc/postfix/main.cf
:/etc/ CLOSE_WRITE,CLOSE .passwd.swpx /etc/ CLOSE_WRITE,CLOSE .passwd.swp /etc/ CLOSE_WRITE,CLOSE 4913 /etc/ CLOSE_WRITE,CLOSE passwd /etc/ CLOSE_WRITE,CLOSE .passwd.swp /etc/postfix/ CLOSE_WRITE,CLOSE .main.cf.swx /etc/postfix/ CLOSE_WRITE,CLOSE .main.cf.swp /etc/postfix/ CLOSE_WRITE,CLOSE 4913 /etc/postfix/ CLOSE_WRITE,CLOSE main.cf /etc/postfix/ CLOSE_WRITE,CLOSE .main.cf.swp
您可以很容易地將其放入腳本中,在每個
close_write
事件中,該腳本會將文件送出到本地儲存庫並將更改推送到遠端伺服器。另請注意,incron是一種用於自動化這種基於 inotify 的工作流的漂亮工具(但不會顯著改變解決方案的性質)。
如果您的管理員將編輯在執行時由伺服器更新的相同文件,您將遇到困難。這表明您將不得不在伺服器上設置某種自動衝突解決方案,這總是會導致失去一些資訊(好吧,明顯的失去,至少,您顯然可以保留兩個不同分支中的衝突更改儲存庫,但伺服器只能看到一個分支)。
我認為這個問題或解決方案的任何部分都不是 git 特有的。對於任何類型的分佈式、非同步同步的文件共享維護,您都會遇到這些問題。