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

标签 git

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

我已经按照此处的建议尝试了 --cached 标志 Remove a file from a Git repository without deleting it from the local filesystem

但它就是行不通。我通过 rm --cached file 删除文件。我 promise 被删除的事实。但是当我 git pull 时,它会从服务器中删除该文件。

更新示例:SF2 参数文件(应忽略​​,因为它因机器而异)

  • app/config/parameters.yml - 在 .gitignore 中应该忽略的文件
  • 不小心被 push 仓库
  • 修复 .gitignore 文件
  • 我需要将其从存储库中删除,但是当我在服务器上执行 git pull 时,不应删除该文件。
  • 在本例中非常简单,只需在服务器上手动备份一个文件,git pull(删除文件),恢复备份。
  • 但就我而言,有很多不同的文件夹/文件。

服务器是指存储库的克隆,而不是存储库本身。它只是另一台克隆了存储库的机器

更新的简短说明:

让我们考虑repo-server |本地机 | deploy-server .. 我想通过 local-machine 从存储库中删除一些文件(如果另一个 local-machine-2 git clone 存储库它没有得到这些文件),但是 当我通过 git pull 更新 deploy-server 时我没有希望从 deploy-server

中删除这些文件

最佳答案

IMO,这里有三个选项。

1) 将update-index--assume-unchanged 标记一起使用

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 存储库中删除该文件,但会忽略使用此文件对其进行的任何本地更改。

问题是,如果任何上游提交更新这些文件,git 将中止 pull 并抛出一个错误提示,您对以下文件的本地更改将被 merge 覆盖。您可能现在记得您运行了这个命令,但过一段时间后,您就记不起来了,并且可能很难找出哪里出了问题。

2) 使用 git submodules

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

git rm -r --cached app/config/

并在 app/config/中创建一个新的 repo

潜在问题 - 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 子模块,您可以获得存储库之间的确切关系,但是使用嵌套存储库,您将错过该信息。

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

关于Git:从存储库中删除文件/文件夹,但在运行 git pull 时不从 git clones 中删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19161577/

相关文章:

git - 我如何 fork 旧版本的 github 项目?

git - 为什么我不能在 BitBucket 中为 pull 请求指定另一个存储库?

git - 你如何在 git 中 bundle 子模块的变化?

java - 如何使用 Git 存储库作为爆炸 war ?

linux - Git checkout 分支不工作

git - 如何使用 git 查看影响特定文件的所有提交的列表(包括孤立或悬空提交)

git - Ran git rebase origin/develop 现在我有一个 (develop|REBASE 1/2) - 分支

linux - Git删除所有未修改的文件

GitLens 无法在 Visual Studio Code 中 pull 推送

git svn 忽略路径使用忽略文件