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:忽略公共存储库的文件,但不忽略私有存储库的文件 的相关文章

  • git 从存储中删除文件

    我有一个藏匿处 里面有一堆文件 但由于文件冲突 我无法应用我的存储 我已经在我的存储中发现了有问题的文件 我想将其删除 如何从存储中删除单个文件而不破坏整个文件 存储是一次提交 或者实际上是两次甚至有时是三次提交 并且您无法更改提交 那么
  • 如何使用 git-tfs 清理损坏的历史记录

    我不确定我是如何进入这种状态的 但我的 tfs 默认远程分支中有一些 TFS 中不存在的提交 所以我想摆脱它们 所以我的历史是这样的 A B C D tfs default 但提交 B 和 C 实际上并不是 TFS 中的变更集 因此 当我签
  • git log --oneline 提供在管道或重定向到文件时丢失的 HEAD 信息

    当我执行没有管道或文件重定向的 git log oneline 命令时 它会提供有关 HEAD 位置和分支的信息 下面示例中的 master git log oneline color never 8bc8511 HEAD gt day 2
  • 如何 git checkout 提交并将子模块更新到该提交?

    我正在克隆一个带有子模块的项目并恢复到大约一年前的提交 git clone recursive branch 5 6 https codereview qt project org pyside pyside setup cd pyside
  • 为什么 cmake 在 git commit 后编译所有内容

    假设我有时在 Linux 上使用 cmake 2 8 编译一段代码 我更改了一个文件 my changed file 运行 cmake 并且只构建了这个文件 到目前为止 一切都很好 现在我想提交这个 git add my changed f
  • 如何克隆没有提交的裸 git 存储库并在克隆过程中获取正确的 HEAD 引用?

    这个答案 https stackoverflow com a 26898059 438273声称该问题已在版本中修复1 8 4 3 但是我在版本中还是遇到了2 25 1 它似乎在版本中按预期工作2 32 0 所以我不确定它是什么时候真正修复
  • 原始文件被分成另外两个文件,git 有没有办法查看内容去了哪里?

    我的问题 我是一名代码审查员 我在GIT中有一个情况 before a txt 然后开发人员决定拆分内容a txt分成 2 个文件 并在一次提交中添加一些更改 after b txt 很少的变化和c txt 一些变化 有没有简单的方法可以看
  • 如何正确设置 Azure DevOps 和 GitHub 之间的双向同步

    我想通过执行以下操作在 Azure DevOps 和 GitHub 之间创建双向同步 使用 CI 触发器创建 Azure DevOps 管道 将更改从 Azure DevOps 存储库推送到 GitHub 中的分支 创建第二个管道 用于侦听
  • 将存储库从 Github 移至 Gitlab

    有没有办法将整个存储库从 Github 移动到 GitLab 对于代码本身来说 只需在 GitLab 上创建一个新的存储库并推送到它即可 Wiki 页面位于 Github 上的单独分支中 并通过 Git 机制进行管理 据我所知 GitLab
  • 如何更新我的裸存储库?

    我创建了一个裸存储库来发布我的存储库 但我不知道如何使用主存储库的当前状态更新裸存储库 如果您想复制主存储库中的所有对象 请在主存储库中执行此操作 git push all
  • Eclipse git checkout(又名恢复)

    是否可以做相当于git checkout在 Eclipse 中使用 Egit 插件 我有一个已修改的文件 我想放弃更改并将文件恢复到源存储库中的内容 在 Subversion 中 这称为恢复 在 git 中 相当于 checkout 我在团
  • 从“git diff”中排除文件

    我正在尝试排除一个文件 db irrelevant php 来自 Git diff 我尝试将文件放入db子目录名为 gitattributes与线irrelevant php diff我还尝试创建一个名为 git info attribut
  • 获取 git 存储库中每个文件的提交计数

    我正在寻找一种方法来查看有关 git 存储库中每个文件更改频率的统计信息 基本上 文件提交的频率实际上与以前的版本不同 此外 有没有办法获取文件上次更改的日期 我是一个 git 新手 还没有发现任何关于此的信息 任何帮助将不胜感激 这里有两
  • Git 查找第一个非本地提交

    有关的 列出尚未推送到源的 Git 提交 https stackoverflow com questions 3080509 list git commits not pushed to the origin yet git rev par
  • 在 emacs 的文件中不断出现的这些 ^M 是什么?

    我认为这可能与 TextMate 有关 但我们在一个小团队中工作 并且在 git 中几乎相同的文件的全文件冲突方面遇到了一些问题 在一个分支中 文件的每一行都附加了 M 这是什么神秘的事 M角色应该做什么 它从哪里来 我们的开发人员在 Wi
  • 竹子 - 构建我的拉取请求

    当拉取请求进入 git 时 我试图触发竹子中的构建 我可以将 webhook 信息发送到竹子 但它不是构建适当的 sha 标记的签入 而是构建 主 分支 这是否需要对竹子进行一些自定义 git 设置 到目前为止我还没有看到任何简单的事情 在
  • 在 Bitbucket 中分叉存储库,保留分叉删除原始内容

    我在 Bitbucket 中分叉了一个存储库 但我想知道删除原始存储库后会发生什么 克隆也会被删除吗 别担心 分叉将继续存在
  • 为什么 --first-parent 不是 git show 的默认值?

    我确信这个问题将作为基于意见的问题而结束 但没有其他地方所以问它 所以这里 我正在尝试查看我的分支的历史记录 其中包括合并提交 特别是更改的内容 我在这里找到了一篇非常有用的帖子git 显示合并提交 https stackoverflow
  • git 如何在不同分支中保持不同的配置文件?

    请允许我先表达一下我的尝试 假设我有两个分支 Alice1 和 Alice2 Alice1 有自己的服务器 Alice2 也有自己的服务器 我希望能够签出 Alice1 编写我的代码 然后通过使用保存在 URL 配置文件中的 URL 直接推
  • Git 将分支从一个远程推送到另一个远程?

    我设置了以下遥控器 git remote korg rorg 以及以下分支 git branch a no branch remotes korg gingerbread remotes korg gingerbread release r

随机推荐

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

    如果 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 分支中提交和推送 解决这个问题的最佳方法是什么