2015-09-04 181 views
1

我有一個使用GIT的版本控制下的網站。我設置了一個系統,它自動將我的master分支中的更改部署到我的生產服務器。也就是說,我的存儲庫中有一個web-hook,它會觸發一個PHP腳本,從本質上啓動服務器上的git pull以便下拉更改。Git忽略文件,但不刪除它

我的問題在於我目前有一個使用git進行跟蹤的配置文件(config.php)。我和另一位開發人員希望我們自己的config.php文件與服務器上的文件不同,因此我們希望告訴git停止跟蹤此文件並假裝它不在那裏。

我們首先決定使用不太重要的文件進行測試,因此我們在我們的.gitignore文件中添加了test.php,希望這可以做到。 Git仍然在跟蹤文件,所以我試圖運行git rm --cached test.php,試圖停止跟蹤文件。這似乎工作,所以我們承諾並推動我們的改變。

令我驚訝的是,當我們的部署腳本啓動了我們服務器上的拉動時,我們發現這個文件已經從生產中刪除。謝天謝地,刪除的test.php並不重要。

TLDR;我該如何告訴git忽略它當前跟蹤的文件,將它從我的存儲庫中取消跟蹤並刪除,但將其保留在我的生產服務器上?

回答

2

如果您從存儲庫中刪除一個跟蹤的文件,它將被刪除,如果更改被拖動。這是預期的和期望的行爲,因爲如果從存儲庫中刪除文件,則認爲它不再需要。

你的情況最簡單的解決方案是從存儲庫中刪除文件並將其添加到.gitignore,然後立即手動將其添加回服務器上。您也可以先對服務器上的文件進行一些無關緊要的更改,例如添加一個空行,導致pull失敗。

另一種方法是將文件保存在存儲庫中,並在開發存儲庫上使用git update-index --assume-unchanged config.php。這告訴git忽略文件的變化,儘管它被跟蹤。

還有一種選擇是創建一個新文件,如local_config.php,如果它不存在,那麼它不會被git跟蹤並有條件地包含在config.php之內。你可以在這個文件中做所有的本地修改。

最後一個選項的優點是,您仍然可以通過將新版本的文件推送到存儲庫來修改服務器上的config.php

+0

你能解釋爲什麼我必須從存儲庫中刪除文件將它添加到.gitignore,然後將其添加回來? –