Git:在运行Git pull时,从存储库中删除文件/文件夹,但不要从Git克隆中删除

Git:在运行Git pull时,从存储库中删除文件/文件夹,但不要从Git克隆中删除,git,Git,我添加并提交了一个错误的文件夹。修复.gitignore文件后,我需要从存储库中删除这些文件,但我不希望在服务器上运行git pull时删除这些文件 我尝试了这里建议的--cached标志 但它就是不起作用。我通过rm--cached file删除该文件。我承认被删除的事实。但是当我git pull时,它会从服务器上删除该文件 更新示例:SF2参数文件(应忽略,因为不同机器的参数不同) app/config/parameters.yml-应在.gitignore中忽略的文件 意外地被推到存储库

我添加并提交了一个错误的文件夹。修复.gitignore文件后,我需要从存储库中删除这些文件,但我不希望在服务器上运行
git pull
时删除这些文件

我尝试了这里建议的
--cached
标志

但它就是不起作用。我通过
rm--cached file
删除该文件。我承认被删除的事实。但是当我
git pull
时,它会从服务器上删除该文件

更新示例:SF2参数文件(应忽略,因为不同机器的参数不同)

  • app/config/parameters.yml
    -应在.gitignore中忽略的文件
  • 意外地被推到存储库中
  • 修复.gitignore文件
  • 我需要将其从存储库中删除,但在服务器上执行
    git pull
    时,不应删除该文件
  • 在本例中,只需在服务器上手动备份一个文件,即git pull(该文件已删除),即可恢复备份
  • 但就我而言,有很多不同的文件夹/文件
服务器是指存储库的克隆,而不是存储库本身。这只是另一台克隆了存储库的机器

更新的简短解释:


让我们考虑<代码> RePoServer本地机器部署服务器< /代码>。我想通过

local machine
从存储库中删除一些文件(如果另一个
local-machine-2
git clone
存储库中没有这些文件),但是当我通过
git pull
更新
deploy服务器
时,我不想从
deploy服务器删除这些文件
IMO,这里有三个选项

1) 将
更新索引
一起使用--假定未更改
标志

git update-index --assume-unchanged app/config/parameters.yml
git update-index --no-assume-unchanged app/config/parameters.yml #Undo effect of previous command
您不会从git repo中删除该文件,但会忽略使用此文件对其进行的任何本地更改

问题是,如果任何上游提交更新了这些文件,git将中止拉取,并出现一个错误,即,
您对以下文件的本地更改将被merge覆盖。您可能现在还记得您运行了这个命令,但过了一段时间,您就不会了,并且可能很难判断出什么地方出了问题

2) 使用git

要使用子模块,您必须从父repo中完全删除文件夹(比如
app/config

git rm -r --cached app/config/
并在app/config中创建一个新的回购协议/

潜在问题-1)可能需要多个子模块,具体取决于你的应用程序结构2)如果所有更改都是配置文件,那么就你将面临的头痛而言,这无疑是一种过火行为

3) 使用嵌套的git存储库

在本例中,您将在第一个内部创建一个git回购

cd ~/Desktop/project
git rm -r --cached app/config/
echo app/config >> .gitignore
cd app/config
git init && git add . && git commit -m "config paramters"
2和3之间的区别在于,使用git子模块,您可以获得repo之间的确切关系,但是使用嵌套repo,您将错过这些信息


此外,您还需要为子模块中的每个此类文件夹创建一个额外的git repo,但您可以使用一个额外的repo来使用shell脚本同步所有此类更改。

拉取不会更改服务器上的内容。你的意思是推吗?@bengoesboom-我会在几分钟内更新我的问题的更多细节。也许不太清楚,你有Reops<代码>你的普通服务器>代码>推/拉过VBAR,你想从提交历史中删除OOPsie的所有踪迹而不删除服务器工作树中的浮点,是吗?@ JTHEEL -让我们考虑<代码> RePoServer本地机器部署服务器< /代码>。我想通过
local machine
从存储库中删除一些文件(如果另一个
local-machine-2
git clone
存储库没有获得这些文件),但是当我通过
git pull
更新
deploy服务器
时,我不希望从
deploy服务器
中删除这些文件——这有意义吗?@alex.dominte将其添加到问题描述中。现在有道理了,但之前没有。+1-对于详细的答案和建议的解决方案,但我相信您理解,对于一个显然简单的问题来说,这些解决方案太复杂了。谢谢