git删除被跟踪目录中的服务器生成的文件

时间:2017-09-26 21:29:04

标签: git

让我们假设这个基本项目:

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

在此目录的根目录中运行以下命令:

git init
git add -A :/
git commit -m "initial commit"
git push ssh://username@servername: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://username@servername:path/to/www master

然而,这只是从它的位置删除custom.css文件而不是保持不变。如何设置它以便在不必配置任何服务器端时推送git不会覆盖或删除custom.css?我希望有一个解决方案,涉及配置本地git仓库。谢谢!

1 个答案:

答案 0 :(得分:0)

.gitignore是一种忽略文件的全局方法,这意味着它根本不会被跟踪。如果您需要在本地忽略文件,但不希望存储库忽略该文件,则应提交custom.css文件,然后使用.git/info/exclude as described in the git documentation创建本地显式存储库排除

那就是说,我认为最佳做法是在服务器上设置一个观察程序(例如,定期运行的grunt worker或cron作业)来监视服务器上文件的更改并将其作为它们已经完成,因为这将为您提供对custom.css文件的正确版本控制,并在必要时允许回滚。 (根据您的具体情况,这可能是过度的,在这种情况下,只需使用显式排除。)

如果你决定走这条路,你应该将git存储库保存在与生产站点不同的目录中。配置grunt worker来监视生产站点,因此当FTP用户进行更改时,它将触发对存储库的提交。实现此目的的一种方法是将grunt-git-commit与由grunt-git-deploy任务触发的grunt-contrib-watch结合使用。