Git 防止在拉取过程中删除被忽略的文件

Git 防止在拉取过程中删除被忽略的文件,git,git-pull,Git,Git Pull,我们在组织中使用Git更新所有项目服务器上的代码。通常,开发人员忘记忽略应该忽略的文件(如db config或data等),并将它们推送到我们的Git服务器。它随后会同步到代码运行的实际服务器(在挂钩的帮助下)git pull,以获取最新代码 现在,如果我将任何特定文件添加到.gitignore,并将其从索引中删除,然后使用以下命令将其推送到服务器 git rm --cached config.php git add .gitignore git commit -m "removed confi

我们在组织中使用Git更新所有项目服务器上的代码。通常,开发人员忘记忽略应该忽略的文件(如db config或data等),并将它们推送到我们的Git服务器。它随后会同步到代码运行的实际服务器(在挂钩的帮助下)<在服务器上执行code>git pull,以获取最新代码

现在,如果我将任何特定文件添加到
.gitignore
,并将其从
索引中删除,然后使用以下命令将其推送到服务器

git rm --cached config.php
git add .gitignore
git commit -m "removed config file and ignored it"
git push origin master
这将从Git中删除该文件,但不会从我的本地repo中删除。它还将阻止进一步跟踪它

然后,
git pull
在服务器上执行,该服务器将删除引起问题的新忽略的文件。在服务器上执行简单的
pull
命令,如下所示:

git pull origin master
我不想从服务器上删除
config.php
文件,同时将其从git远程存储库中删除

有时,我会以相同的方式删除大量文件,这些文件应该保留在服务器上(代码运行的地方)


对于这一点,最简单和可编程的解决方案是什么?我开发了一个Node.js程序,它可以登录到服务器并以编程方式运行
pull
命令;您正在记录删除,并且在您执行更新时删除正在发生。事实上,如果你提交了一个你不想要的文件,这就是你想要发生的事情;你不会期望它在之后会被留下来

如果确实要防止这种情况发生,请在服务器上编写一个提交挂钩,以验证提交不会在那些不希望它们提交的显式路径上添加任何内容,并首先禁止推送任何此类提交。这样,开发人员就必须在本地解决他们的提交问题

请注意,“添加删除文件的新提交”是不够的,因为临时提交已经添加了该文件。有必要用一开始意外添加删除提交的提交来挤压该删除提交


您如何教育您的用户是一个单独的问题…

可以帮助您判断是否正确。我知道它是如何工作的,它很好。挤压不会改写历史吗?我不允许开发人员通过强制推送来防止覆盖他人的工作。在上传之前,您必须让开发人员在自己的本地机器上进行压缩。如果编写提交钩子,它们就不会损坏中央存储库。然后,他们可以将其重新设置为最新版本,这样就不会破坏共享存储库的历史记录。您说过在服务器上编写提交挂钩,但在大多数情况下,第一次提交是从开发人员的本地系统进行的。然后从我们的Git服务器克隆到服务器上。好的,但我们有100个项目。在开发人员执行
push
之前,不可能为开发人员系统上的每个项目创建提交挂钩(特定于项目)。是否有方法在Git server上全局配置某些文件模式(适用于所有项目),以便它不会接收添加/更改与这些模式匹配的文件的提交?我的服务器是
Gitlab-CE