2017-09-26 60 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仓库中完成一些配置。我认为没有可用的解决方案? –