我们在组织中使用 Git 来更新所有项目的服务器上的代码。通常,开发人员忘记忽略应该忽略的文件(例如数据库配置或数据等)并将它们推送到我们的 Git 服务器。随后会同步到代码运行的实际服务器(在 Hook 的帮助下)。在服务器上执行git pull
,获取最新代码。
现在,如果我将任何特定文件添加到 .gitignore
并将其从 index
中删除,并使用以下命令将其 push
到服务器。
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
命令。
最佳答案
你不能;您正在记录删除,并且在执行更新时会发生删除。事实上,如果您提交了一个您不想要的文件,这正是您希望发生的情况;你不会期望它之后会被闲置。
如果您确实想防止这种情况发生,请在服务器上编写一个提交 Hook ,以验证提交不会在您不希望他们提交的显式路径中添加任何内容,并禁止任何此类提交从一开始就被推。这样开发人员就必须在本地解决他们的提交。
请注意,“添加删除文件的新提交”是不够的,因为临时提交已经添加了该文件。有必要将删除提交与最初意外添加的提交一起压缩。
如何教育用户是一个单独的问题......
关于git - 防止忽略的文件在 pull 过程中被删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32269331/