Git 删除本地而非远程索引的文件

2024-04-06

我使用 GitHub 进行多服务器部署,一台是生产服务器,一台是开发服务器。有些配置文件(我们称之为 config.php)需要特定于服务器。但是,出于备份目的,我们需要将产品的配置文件保留在 GitHub 服务器上。然而,在开发服务器上,我们需要继续将其从 git push/pull 进程中删除,以便它永远不会上传到服务器,或覆盖 git pull 命令。我怎样才能做到这一点?将其添加到 .gitignore 来处理此过程,或者将其复制到生产服务器。

作为参考,配置文件相对于 .git 的位置是 /exampledirectory/config.php


您的问题的答案是:您不能。

如果配置文件已经被 git 跟踪,你不能只在本地忽略它(这就是为什么克隆的存储库是一个clone:内容确实完全相同)

有 3 个选项:

  • 您可以从 git 中删除该文件(git rm exampledirectory/config.php --cached && git commit && git push)但是您必须连接到远程服务器并恢复该文件(仅一次)。现在,如果您想更改生产配置,则必须远程登录。

  • 或者,您可以将该文件重命名为 config-default.php,并最终添加一个更新后挂钩(和/或其他挂钩,根据您的需要在本地或远程添加),以便在检测到更改时将该文件复制到 config.php。

* 另一种替代方案(我使用类似的解决方案)需要一些开发来更改配置文件的包含方式,具体取决于您当前所处的环境(生产、开发或其他):例如,如果您在本地虚拟主机中添加setEnv CUSTOM_ENV develop,然后可以使用以下代码:

if (isset($_SERVER['CUSTOM_ENV']))
{
  $config = __DIR__.'/exampledirectory/'.$_SERVER['CUSTOM_ENV'].'/config.php';
  if (!file_exists($config))
    $config = false;
}

if (!$path)
{
  $config = __DIR__.'/exampledirectory/config.php';
}
require_once($config);

您还可以将环境定义基于磁盘中某个位置的文件(名为.debug.inc、您的 ip(本地主机时为 127.0.0.1)您将设置的 cookie 的值或您想要的任何内容。

在该示例中,路径exampledirectory/develop可能位于 .gitignore 中,因此所有开发人员都可以毫无问题地自定义自己的配置。您稍后可以添加更多环境(预生产、测试​​等),并根据您想要测试的内容进行不同的配置。


另外,如果以后您有超过 2 个服务器部署,您可以使用一种分层样式拥有(稍微)更复杂的配置系统:

首先,加载默认(通用)配置somedir/config.php其次,检查当前环境是否存在附加配置文件(somedir/[ENV]/config.php),如果存在也包括它。

因此,如果您的配置文件仅返回参数数组,那么这不是问题,但如果您的配置文件包含常量,则可能会遇到一些问题(无论如何,这都是不好的做法:))。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Git 删除本地而非远程索引的文件 的相关文章

  • Windows 版 GitKraken 中的文件名太长

    正如建议的Q22575737 https stackoverflow com a 22575737 6623589 我已经更新了我的注册表并设置了git config system core longpaths true在处理长路径时 问题
  • 交互式变基后,本地 Git 分支已偏离原始分支

    我有一个本地分行 CRM ayrshireminis 其中有一些我已推送到原点的提交 origin CRM ayrshireminis 这个分支是从创建的develop大约一周前的一个分支 其他合作者已经在该分支上完成了一周的工作 我想做的
  • 有没有办法缓存 https 凭据以推送提交?

    我最近转而将我的存储库同步到 GitHub 上的 https 由于防火墙问题 并且每次都要求输入密码 有没有办法缓存凭据 而不是每次都进行身份验证git push 自 Git 1 7 9 2012 年发布 以来 Git 中有一个巧妙的机制可
  • 如何使用 .gitattributes 避免在 git root 中包含文件夹,但在 zip 的 dist 文件夹中包含同名文件夹

    我有一个名为lib在存储库的根目录和另一个名为lib在 dist 文件夹中 我正在尝试使用 gitattributes文件排除除 dist 之外的所有文件夹和文件 以便任何下载为 zip 或 tarball 的人都只会 git 分发文件 我
  • Git 无效的修订范围 Symfony2 Composer 外部包

    RuntimeException Failed to execute git log 18efcf67d236d5bbf46ac67820250dffd0474b6e 94e2146f525fa1367e15646fa273e5b34f92
  • 相当于“svn update -r”的 git 是什么?

    我是最近的 git 转换者 能够使用 git svn 将我的分支保留在本地而不干扰 svn 服务器真是太棒了 最新版本的代码中存在一个错误 我想确定一个它起作用的时间 以便我可以使用 git bisect 我找不到正确的命令来及时返回 谢谢
  • 忽略 git 中的本地配置文件

    Rails 应用程序中有一些本地文件 属于我们存储库的一部分 我希望 git 忽略它们 基本上 我希望 git 忽略我对 config environments 目录和 config application rb 文件中的任何内容所做的所有
  • Jenkins git 插件 - 有时太慢

    以下内容摘自 Jenkins 日志 00 00 03 135 gt git fetch tags progress email protected cdn cgi l email protection some org some repo
  • 推送时发生 Git 错误 - update_ref 失败

    当我尝试推送本地提交时遇到问题 这可能是在 Android Studio 崩溃时发生的 这是错误 update ref 引用 refs remotes origin master 失败 无法锁定 ref refs remotes origi
  • readthedocs 中自动生成的索引文件

    我无法上传到阅读文档 http docs readthedocs io en latest 我为我的项目准备的文档 我正在尝试了解问题所在 该文档在本地构建良好make html但我无法上传 GitHub 项目是ASCII基因组 https
  • 远程测试时如何搭建git开发环境

    这似乎是一个愚蠢的问题 但我觉得我对 GIT 相当了解 但我似乎无法按照我的意愿设置我的开发环境 我要么错过了一些非常简单的东西 要么我做错了 我在我的服务器上初始化了一个裸 git 存储库 将其克隆到我的本地计算机 提交我的文件并推送到原
  • 如何将更改移出主分支

    基本问题 但这一直发生在我身上 进行更改working branch 切换到master git merge working branch git push cap deploy 到舞台 泡一杯新茶 然后我回来思考其他事情并开始做出一些改变
  • 有没有办法让 git flow 显示它在幕后执行的命令?

    有什么方法可以让 git flow 提前告诉我当我执行 flow 命令时它将执行的确切 git 命令吗 或者告诉我它是东吗 我只能看到输出和摘要吗 你可以使用Git的GIT TRACE 环境变量 http git scm com docs
  • `git ls-files -s` 输出中不同字段的含义是什么?

    在 Git 中 命令返回的典型结果行git ls files s好像 100755 be2c2e9b0966253096472d4b482c458bc892e493 0 gitignore 这些字段是什么意思 不用再犹豫了git ls fi
  • Git:发送电子邮件而不提交

    我有一个项目 我做了更改 并想使用 git send email 功能将它们发送给另一个用户 我发现它可以通过发送补丁来工作 由git format patch每次提交 是否可以只发送diff的 我不想先提交 然后发送补丁 是否有gitfo
  • git 匹配多个单词的标签

    我们可以得到最后一个 git 标签 它以一个单词 例如 TEST 开头 如下所示 git describe tag dirty match TEST 我想知道如何获得最后一个以 word1 开头的标签orword2 例如测试OR跑步 我尝试
  • git config --global user.email 重新安装后不会让我更改电子邮件

    嘿 我完全重新安装了 Github 删除了所有文件 现在我再次安装了它 但是当我尝试设置它时 我遇到了一些问题 git config global user email 电子邮件受保护 cdn cgi l email protection
  • Ansible bitbucket 克隆存储库配置 ssh 错误

    我之前发布过这个问题 但那里的答案不再有效 总之 当使用 Ansible 配置我的 vagrant box 时 在尝试使用 ssh 克隆我的 bitbucket 私有存储库时 我遇到了一个神秘的错误 该错误指出 权限被拒绝 公钥 然而 如果
  • VS 2015 + Bower:在防火墙后面不起作用

    Problem 在 Visual Studio 2015 中 使用 Bower 我的包在防火墙后面时恢复失败 并出现类似以下内容的错误 ECMDERR 无法执行 git ls remote tags heads git github com
  • 在 Windows 7 上的 Sourcetree 中比较 Word docx 文件

    我一直在尝试获取在 Windows 7 上的 Sourcetree 中工作的 Word docx 文件的文本差异 我已按照此处的说明进行操作将 Microsoft Word 与 git 结合使用 http blog martinfenner

随机推荐