Git:忽略公共存储库的文件,但不忽略私有存储库的文件

2024-04-22

我正在通过 git 在 Heroku 上部署 Rails 应用程序(目前),并且还希望有一个公共版本供人们查看。有些文件是敏感的,只能在“heroku”分支中提交和推送,而不是在“public”分支中提交和推送。解决这个问题的最佳方法是什么?

(I do了解 Heroku 的配置变量,这作为临时解决方案非常有用,但如果我需要切换主机,那就不太有趣了。)

这两个分支不需要始终同步 - 我可以定期将“master”分支合并到“public”分支并将其单独推送到 github。

我尝试过各种事情:

  • 分离.gitignore文件和“我们的”合并策略 - 这一开始不起作用,在搞乱它一段时间后,我认为它变得太复杂了,这样我就可以完成一个看似简单的任务

  • 使用自定义exclude文件,并将以下内容添加到.git/config...这根本不起作用:

.git/配置

[branch "public"]
  excludesfile = +info/exclude_from_public

让私有和公共存储库共享相同的代码,但忽略公共存储库中的敏感文件的最佳方法是什么?

您可以假设尚未提交或推送任何代码,即这是一个新初始化的存储库。

(这个问题以前曾以各种形式被问过,但没有一个答案是直截了当的,或者答案似乎是really哈克。我只是想以一种非常简单的方式提出这个问题,并希望得到一个非常简单的答复。)


我将支持子模块的答案,但尝试提供一些说明。首先,git 不处理文件,而是处理提交。无法过滤分支中的文件或路径,因为分支实际上是指向提交的指针。当您排除或忽略时,您只是阻止将文件添加到存储库中。存储库中甚至没有任何“敏感文件”文件,只是在您的工作目录中。

子模块只是对存储在存储库中的另一个存储库的引用,以及检出存储库正在跟踪的特定提交。你可以说更新使用

git submodule update --recursive sensitive-files

为了简化事情,您可以在指向子模块路径的正确位置提交符号链接。

ln -sf sensitive-files/shadow passwd

然后像添加任何其他文件一样添加符号链接。

请记住,子模块只是一个签出的 git 存储库,您可以轻松限制对该实际存储库的访问并将主存储库公开。

Updated:

抱歉,如果您仍在处理此问题,我错过了通知。

您的私有存储库中可以有多个符号链接,引用在子目录中检出的私有存储库(子模块)。每个数据库或 Rails 实例使用的任何内容都可以是该私有子目录的符号链接。

另外,您不需要指向私有存储库的远程,只需要 .gitmodules 文件中的一个条目,该条目由git 子模块。您仍然需要保护私有存储库,以便只有您的 Heroku 实例可以访问它。为此,如果可以的话,我建议在服务器上安装 gitosis,或者使用其他一些私有 git 托管解决方案。将与您的实例私钥匹配的 ssh 公钥添加到允许的用户列表中。 (我不熟悉如何在 Heroku 中执行此操作。)

当您将更改推送到 heroku 时,它应该递归下载存储库中提到的所有子模块。

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

Git:忽略公共存储库的文件,但不忽略私有存储库的文件 的相关文章

  • 从 IntelliJ IDEA 中的版本控制中删除文件

    我正在使用 IntelliJ IDEA 社区版 2016 1 我已将我的项目放在 Git 下 并将其托管在 GitHub 上 When I first hit that Share Project on GitHub button ever
  • Git 仅拉取一次提交

    其实git仓库和本地文件是一模一样的 但另一个网站距离 5 次提交还很远 所以我有一段时间没有拉了 我也不想这样做 所以现在我想对我的本地文件进行一些更改 然后将其推送到 git 存储库的新提交中 然后只能拉动该一个提交 而不能拉动所有其他
  • Github 贡献图中未显示进度?

    我在 github 中的存储库是公开的 当我通过命令行将文件从本地系统推送到 github 时 新贡献不会显示在贡献直方图中 但是 当我将任何文件直接添加到 github 的存储库中时 贡献会显示在直方图中 这是什么原因呢 一个可能的原因是
  • 如何使用开发分支中的一行命令更新本地 master 并重新设置其基准?

    假设我正在一个名为dev那就是跟踪master 如果我想更新我的主分支 我需要经常运行这一系列命令 git checkout master git pull git checkout dev git rebase i master 当我在
  • 如何在 git log 中查看提交的 git bisect 状态?

    我正在做 git bisect 到目前为止我发现了一些好的和坏的提交 我可以通过运行来确认git bisect log 但是 如果我为我的分支运行 git loggit log graph decorate full origin mast
  • Git - 如何压缩对被忽略文件的更改而不丢失这些更改?

    我想使用 git 保存应用程序随时间使用的实际依赖项的历史记录 其保真度比我从包管理器获得的保真度更高 我正在使用这些分支 master 仅源代码 依赖于 gitignore 构建 源代码和依赖项 build TIMESTAMP 用于强制提
  • 无法获取 https://gerrit.googlesource.com/git-repo/clone.bundle

    我尝试按照以下说明创建一个 git 存储库 source android com source downloading html installing repo 但是当我尝试在工作目录中初始化存储库时 使用 Ubuntu 出现以下错误 wo
  • jenkins构建完成后如何将更改推送到github?

    我有一个 jenkins 作业 它从 github 克隆存储库 然后运行 powershell 脚本来增加文件中的版本号 我现在正在尝试将该更新文件发布回 github 上的原始存储库 因此当开发人员提取更改时 他会获得最新的版本号 我尝试
  • 将源代码从 git 迁移到 TFVC

    我们使用的是Visual Studio Online 我们使用TFS的git支持 我们现在想停止使用 git 并使用 TFVC 将源代码迁移到 TFVC 的最佳解决方案是什么 假设您正在 VSO 中创建另一个项目并移动源代码 按照目前的情况
  • 如何在 github 中拉取请求时忽略或排除文件

    我们有 4 个分支 1 dev 2 qa 3 staging 4 master 我们要更新并添加1 dev中的CODEOWNERS文件中的一些人 2 qa到4 master的CODEOWNER文件将被保留 因为 1 dev 有 4 个审稿人
  • git:显示所有已修改的文件 - 已暂存和未暂存

    我需要一个命令给我所有修改过的文件 这包括暂存 即新添加的文件 和非暂存更改 在普通列表我可以在脚本中使用它 虽然这个问题可能听起来很熟悉 但我只找到接近我想要做的命令 git ls files m 列出 非分阶段 修改但忽略了上演的和新的
  • 执行 rebase 后,Git 提交会在同一分支中重复

    我理解 Pro Git 中提出的场景是关于变基的危险 https git scm com book en v2 Git Branching Rebasing rebase peril 作者基本上告诉你如何避免重复提交 不要对已推送到公共存储
  • Jenkins 的 Gerrit 触发器找不到任何要构建的修订

    我在使用 Jenkins Gerrit 时遇到问题 这是我到目前为止得到的 Jenkins 中的 Gerrit 触发器配置似乎没问题 当我推送新的变更集时 Jenkins 构建就会启动 我用过这个 Jenkins Gerrit 触发器问题的
  • 如何将 git 存储库转换为 Mercurial?

    我一直在使用 git 作为源代码存储库开发 java 应用程序 我想与其他 java 开发人员分享该项目 hg 似乎是他们最常用的 我的问题是如何将 git 存储库转换为 hg 如果我尝试谷歌搜索 将 git 转换为 hg 并且每次搜索命中
  • 以最小的努力在多台计算机之间同步代码

    我希望能够跨多台计算机 准确地说是 3 台 同步源代码和整个项目 我尝试过使用 git 但从来没有获得过无忧无虑的体验 也许是因为我从来没有投入很多精力 所以 我理想中想要的是 能够将文件夹及其所有子文件夹添加到 同步 列表 基本上 一旦我
  • git commit 给出错误:空提交集已通过

    当尝试恢复到以前的提交时 我尝试了 git revert no commit 0766c053 HEAD 然而这给出了一个错误 empty commit set passed 问题 该错误是什么意思 以及出了什么问题revert命令 删除
  • Git Grep 颜色选项解释和/或比较

    我正在尝试自定义我的 Git 颜色 读完后文档 https git scm com docs git config 我找到了我想要设置的选项 除了 Grep 之外 一切都工作正常 我意识到 我过去并没有真正使用过它 我想用相同的调色板为其设
  • 如何调试 Jenkins 作业中无法运行程序“C:\Program Files\Git”?

    我正在使用 jenkins 构建我的 git 项目 这是我在查看日志时收到的错误 我在 jenkins 中使用 git 插件 您将如何解决该错误消息 Started by user anonymous Building in workspa
  • Git - 忽略对配置文件的特定修改

    我的项目中有一个配置文件 其中包含数据库的连接字符串以及多个应用程序设置 例如
  • 具有服务器端挂钩的托管 Git 解决方案?

    已经有一个类似的 版本控制托管解决方案 带有预提交挂钩 关于SO的问题 然而 提出这个问题的用户只需要客户端钩子 我正在寻找一个允许您配置的 Git 主机服务器端 hooks 我寻找这个的原因是为了防止开发人员能够在特定分支上 push f

随机推荐

  • 对布尔值使用按位非运算符 (~) 是否会引发未定义行为?

    如果 C 程序将按位非运算符 应用于布尔值 是否会调用未定义行为 例如 以下程序定义明确吗 bool f false bool f2 f is f2 guaranteed to be true or is this UB bool t tr
  • 帮助我理解 boost::bind 的用法

    请看一下 Johannes Schaub 发布的示例 对向量对进行排序 如何根据对的第二个元素对向量对进行排序 https stackoverflow com questions 279854 how do i sort a vector
  • 数组的 numpy.shape 中的 L 和 numpy.type 中的 32 是什么?

    我正在尝试 numpy 数组的功能 下面是代码 import numpy as np Z np array 0 4 0 0 0 0 0 0 0 1 0 0 0 1 0 1 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0
  • 点列表的 3D 轮廓(凹壳)

    我有一个 C 中的 Vector3 点列表 我需要计算这些点的凹轮廓 确实有很多参考资料 特别是对于 凸 分辨率 由于格雷厄姆算法 我已经成功实现了 然而 由于我现在需要有效地计算凹轮廓 所以我迷失了 维基百科确实列出了很多用于凸计算的资源
  • NSOperationQueue 和 NSFetchedResultsController

    我使用队列和结果控制器的组合来更新和显示一些核心数据对象 在我的 uitableviewcontroller 中 我每隔 X 秒调用一次主控制器对象中的方法 NSTimer scheduledTimerWithTimeInterval 2
  • Flutter video_player 不播放保存到应用程序目录的视频

    UPDATE 我已经确认该文件存在并且可以工作 只是不使用视频播放器 它只是永远不会初始化 当我从 xcode 调试时 它不会抛出错误 我正在使用 image picker 插件 并对其进行了修改以选择视频 在初始选择视频并在视频播放器中播
  • git svn clone 在 Mac OS X 上失败:“名称为‘svn_delta’的临时文件已在使用中”

    我已经从 MacPorts 在我的 Mac 上安装了 git core svn 这给了我 git core 1 7 12 2 0 credential osxkeychain doc pcre python27 svn subversion
  • 找不到 root.crt postgresql

    我有一个正在使用的 postgres docker 映像 并且正在其上启用 SSL 我希望它进行完全验证 因为我有一个 root crt 并且希望确保所有可以使用 SSL 的证书都经过验证 因此 在我的 docker compose 文件中
  • 使用 Spring 处理会话 ID

    我正在尝试为 GWT 构建一个 Spring 服务器 您可以将其视为 Javascript AJAX 客户端 但我无法决定架构的某一点 Session应该如何创建和使用 显然最简单的方法是使用 HTTP 会话 cookie 等 看起来不错
  • 好斗的。开始爬行后如何更改蜘蛛设置?

    我无法更改解析方法中的蜘蛛设置 但这绝对是一个办法 例如 class SomeSpider BaseSpider name mySpider allowed domains example com start urls http examp
  • PHP 显示不带货币文本的 Money_format

    在PHP中 是否可以使用money format来显示货币而不显示货币或至少以缩写形式显示 目前 我使用 money 1234 56 setlocale LC ALL de DE money money format n money 严重地
  • 在java中编写If语句的另一种方法[重复]

    这个问题在这里已经有答案了 可能的重复 Java 运算符的名称是什么 它有什么作用 https stackoverflow com questions 798545 what is the java operator called and
  • 计算无符号长整型序列中的公共位

    我正在寻找比下面更快的算法 给定一个 64 位无符号整数序列 返回该序列中每个 64 位被设置的次数计数 Example 4608 000000000000000000000000000000000000000000000000000100
  • Chrome JavaScript 调试 - 如何在页面刷新之间保存断点或通过代码中断?

    当使用 Chrome 及其 JavaScript 调试器时 每次重新加载页面 脚本时 我的断点都会丢失 我必须在弹出窗口中查找脚本文件 找到断点的代码行 单击添加它 ETC 有没有办法保存这些断点 以便即使在页面刷新后它也会中断 我使用过的
  • char 和初始化列表

    I d like to pass some numeric byte values via an initializer list a variadic template into an array Is that possible tem
  • Ember数据渲染有很多

    在我的 ember 应用程序中 我有一个模型 App Schedule DS Model extend manager DS belongsTo App Manager embedded true entries DS hasMany Ap
  • 异步运行 PHP 任务

    我正在开发一个较大的 Web 应用程序 后端主要是 PHP 代码中有几个地方我需要完成某些任务 但我不想让用户等待结果 例如 当创建一个新帐户时 我需要向他们发送一封欢迎电子邮件 但是 当他们点击 完成注册 按钮时 我不想让他们等到电子邮件
  • 重命名 Azure 存储表?

    是否无法重命名 Azure 存储表 我似乎无法在网上找到任何东西 甚至是 cmdlet Visual Studio Server Explorer Cloud Storage Studio 或 TableXplorer 中没有此选项 你是对
  • 如何删除 vscode 中这个烦人的 Push Changes 按钮?

    它以前不存在 由于某种原因它最近出现在我的 vscode 中 也许是在更新之后 那么有人知道如何删除这些按钮吗 Thanks 从 v1 69 开始 有新设定 https code visualstudio com updates v1 69
  • Git:忽略公共存储库的文件,但不忽略私有存储库的文件

    我正在通过 git 在 Heroku 上部署 Rails 应用程序 目前 并且还希望有一个公共版本供人们查看 有些文件是敏感的 只能在 heroku 分支中提交和推送 而不是在 public 分支中提交和推送 解决这个问题的最佳方法是什么