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

Prevent ignored files from getting removed during pull

我们在我们的组织中使用 Git 来更新服务器上所有项目的代码。通常,开发人员忘记忽略应该忽略的文件(如数据库配置或数据等)并将它们推送到我们的 Git 服务器。稍后会同步到运行代码的实际服务器(借助挂钩)。 git pull在服务端执行获取最新代码

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

git rm --cached config.php
git add .gitignore
git commit -m "removed config file and ignored it"
git push origin master

这将从 Git 但不会从我的本地存储库中删除文件。它还将防止它被进一步跟踪。

然后,git pull 在服务器上执行, 删除 新忽略的导致问题的文件。简单的 pull 命令在服务器上执行如下:

git pull origin master

我不想在从 git 远程存储库中删除 config.php 文件的同时从服务器中删除它。

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

对此最简单且可编程的解决方案是什么?我开发了一个 Node.js 程序,它登录到服务器并在那里以编程方式运行 pull 命令。

你不能;您正在记录删除,并且在您进行更新时正在发生删除。如果您提交了一个您不想要的文件,这实际上就是您希望发生的事情;你不会期望它之后会被遗弃。

如果你真的想防止这种情况发生,请在服务器上编写一个提交挂钩,以验证提交不会在你不希望他们提交的那些显式路径上添加任何内容,并禁止任何这样的承诺从一开始就被推动。这样开发人员将不得不在本地解决他们的提交。

请注意 'adding a new commit which removes the file' 是不够的,因为临时提交已经添加了它。有必要用最初意外添加它的提交来压缩删除提交。

你如何教育你的用户是一个单独的问题...