我添加并提交了一个错误的文件夹.修复.gitignore文件后,我需要从存储库中删除这些文件,但我不希望git pull在服务器上运行时删除这些文件.
我已经尝试了--cached这里建议的标志从Git存储库中删除文件而不从本地文件系统中删除它
但它只是不起作用.我删除了该文件rm --cached file.我承诺被删除的事实.但是当git pull它从服务器中删除该文件时.
更新示例:SF2参数文件(应忽略,因为它因机器而异)
app/config/parameters.yml - .gitignore中应忽略的文件git pull在服务器上执行时,不应删除该文件.服务器是指存储库的克隆,而不是存储库本身.它只是克隆了存储库的另一台机器
更新简短说明:
让我们考虑repo-server | local-machine | deploy-server..我想通过local-machine存储库中的一些文件删除(如果另一个local-machine-2 git clone存储库它没有获取这些文件),但是当我更新deploy-server通道时git pull我不希望从存储库中删除这些文件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
Run Code Online (Sandbox Code Playgroud)
您不会从 git 存储库中删除该文件,但会忽略使用此文件对其进行的任何本地更改。
问题是,如果任何上游提交更新了这些文件,git 将中止拉取并抛出一个错误,指出Your local changes to the following files would be overwritten by merge. 您现在可能记得您运行过此命令,但一段时间后,您就不会记得了,并且可能很难弄清楚出了什么问题。
2)使用git子模块
要使用子模块,您必须app/config从父存储库中完全删除文件夹(例如)
git rm -r --cached app/config/
Run Code Online (Sandbox Code Playgroud)
并在 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"
Run Code Online (Sandbox Code Playgroud)
2 和 3 之间的区别在于,使用 git 子模块,您可以获得存储库之间的确切关系,但是使用嵌套存储库,您将错过该信息。
此外,您还需要为子模块中的每个此类文件夹创建一个额外的 git 存储库,但您可以使用一个额外的存储库来使用 shell 脚本同步所有此类更改。
| 归档时间: |
|
| 查看次数: |
640 次 |
| 最近记录: |