2017-09-26 19 views
0

假設這個基本項目:混帳消除在跟蹤目錄服務器生成的文件

├── css 
│ ├── custom.css 
│ └── main.css 
└── index.html 

在這個目錄的根目錄下面的命令運行:

git init 
git add -A :/ 
git commit -m "initial commit" 
git push ssh://[email protected]:path/to/www master 

這個部署首次提交到服務器,所以它具有相同的目錄結構。文件custom.css適用於有權訪問服務器的人(通過ftp),以便能夠根據需要進行編輯。所以我需要這樣設置,所以無論何時進行推送,custom.css文件都不會被本地版本覆蓋。於是我運行以下命令:

echo css/custom.css >> .gitignore 
git rm --cached css/custom.css 
git commit -am "removed custom.css from being tracked" 
git push ssh://[email protected]:path/to/www master 

然而,這只是刪除了custom.css文件從它的位置,而不是離開它不變。我如何設置它,所以當推git不覆蓋或刪除custom.css而無需配置任何服務器端?我希望有一個涉及配置本地git倉庫的解決方案。謝謝!

回答

0

.gitignore是忽略文件的全局方法,這意味着它根本不會被跟蹤。如果您需要忽略本地文件,但不希望存儲庫忽略該文件,則應提交custom.css文件,然後使用.git/info/excludeas described in the git documentation創建本地顯式存儲庫排除。

也就是說,我認爲最好的做法是在服務器上設置一個觀察器(例如,定期運行的grunt worker或cron作業)以監視服務器上文件的更改並提交它們因爲它會爲您提供對custom.css文件的適當版本控制,並在必要時允許回滾。 (根據你的具體情況,這可能是矯枉過正的,在這種情況下,只需要明確排除。)

如果你決定走這條路線,你應該把git倉庫維護在一個單獨的目錄中現場。配置grunt worker來監視生產站點,因此當FTP用戶進行更改時,它將觸發對存儲庫的提交。你可以通過grunt-git-commit結合grunt-git-deploy任務來觸發任務。

+0

感謝您的回覆,但我無法使用涉及服務器端配置的任何解決方案。也使用涉及本地顯式存儲庫排除的解決方案,不過在遵循您的指示後,會發生什麼情況:每當我推git時,都會部署存儲在repo中的custom.css文件的版本並覆蓋服務器上的custom.css文件(I使用webhook部署到我無法控制的服務器)。當git推送發生時,我需要custom.css文件保持不變,因爲其他人正在通過服務器上的ftp進行編輯。希望這有助於澄清。謝謝 –

+0

grunt worker,cron job,或其他什麼都不需要在服務器上發生。你可以在本地機器上配置一些東西來觀察FTP服務器的變化。最簡單的方法是不要從項目中排除文件,而是在推送提交之前設置一個本地腳本,它將FTP版本與本地'custom.css'區分開來。如果FTP版本與您的副本不同,請使腳本用服務器上的內容覆蓋您的副本,並將其與您做出的任何更改一起提交。希望這是有道理的。 – blendenzo

+0

是的,謝謝澄清,但我希望有一個更簡單的解決方案 - 在我的本地git倉庫中完成一些配置。我認爲沒有可用的解決方案? –

相關問題