跟踪文件但将其从 git 包中排除

2024-02-07

我有一个有点复杂的 ansible 工作流程。我有两个气隙网络。我在两个网络上开发剧本,所以我有两个由 git 管理的有点独立的 ansible 存储库。同时,大多数剧本都可以在这两个地方使用。使事情复杂化的是,这是一种单向转移。我可以从网络A转移到B,但不能从B转移到A。

我有模板文件,其中包含与一个网络相关的信息,但与另一个网络不相关。我将其设计为文件名应该相同(以及 Jinja2 模板中的变量名称)。我希望能够创建一个排除这些文件的 git 包,这样当我从其他网络存储库上的包中提取文件时,文件就不会被覆盖。因为在模板文件中包含错误的信息可能会破坏整个环境,所以我需要在 Git 中跟踪 Jinja2 模板/变量文件。

除了使用 .gitignore (因为需要跟踪文件以便我可以在紧急情况下回滚)之外,是否有人有工作流程建议或 git 命令可以帮助我完成此任务?


没有完全简单的方法可以做到这一点。

从根本上来说,文件是tracked在 Git 中当且仅当它在索引中。索引(通常,最初)是从某个提交填充的,因此是某个先前的提交决定是否要跟踪文件。假设存在提交集T and U类似,只是有些文件不在提交中U提交中的T. Then:

git checkout any-T-sub-i-commit

导致文件位于索引中(并因此被跟踪),同时:

git checkout any-U-sub-j-commit

导致文件不在索引中(因此未被跟踪)。

The same holds in a more general fashion for operations like merging: when you work with commits from set T, you work with the ones that have the files; when you work with commits from set U, you work with the ones that lack the files. If you merge any Ti commit with any Uj commit, the effect on any such file—whether it's added, removed, or conflicted—depends on whether the merge-base commit is in set T or set U, and the specific changes to those files within commit Ti with respect to the merge base commit.

当然,当文件移入或移出索引时,Git 也会同时将它们复制到工作树中或从工作树中删除(通常要注意不要删除未保存但珍贵的数据)。因此,这意味着工作树文件将消失并重新出现,具体取决于您是否签出T提交或U commit.

同时,让我们看看什么是捆绑,至少在抽象意义上是这样。捆绑包的本质在于它包含at least所有的数据git fetch or git push会通过电线发送,之后git fetch or git push用于最小化这些数据的通信过程。 (它可以包含额外的数据,这些数据将被忽略。)这个最小数据包含必须复制的所有对象(带注释的标签、提交、树和 blob)以及引用名称及其值。

要从捆绑包中排除某些文件集,您需要专门捆绑U承诺,而不是任何T承诺。就目前而言,这很好:如果您复制了所有分支,并区分T提交并U通过分支名称提交,您可以很容易地实现这一点。但结果是每次你制作一个新的Tcommit 你必须做出相应的U提交,反之亦然。事实上,你的工作量增加了一倍。

The standard recommendation that applies to configuration files in general applies here as well: Do not commit any configuration, ever. Commit only sample or default or template configurations. Use some kind of wrapper to convert these sample configurations to real configurations. (The wrapper can also be committed, of course, if it's something you write yourself, such as a shell script or Python program or whatever.) You may now maintain, and version-control, these sample / default configurations. Cloning the repository obtains the samples, and updating from the clone—git fetch followed by a merge or rebase—updates the samples, but does not touch the actual configuration. Depending on how smart the wrapper is and what's available in your output format,1 it can even auto-detect that the sample/default input has changed, and warn or fail any runs that use the prescribed tool (i.e., the wrapper itself) until the real configuration is updated to match any required changes coming from the sample/default/template configuration.

这仍然不是微不足道的,特别是,您可能必须编写一个包装器,并教育用户运行特定系统的正确方法。但这是您可能实现的最微不足道的事情。


1In this particular case, your output is most likely the YAML files for ansible. This means you can hide all kinds of useful sample/default-config information in comments, for instance.

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

跟踪文件但将其从 git 包中排除 的相关文章

  • 自动将所有 GitHub 存储库镜像到 gitlab

    对于 GitLab 必须手动为每个存储库设置拉 推镜像 我想知道那里有any way可以自动将所有 Github 存储库同步到 GitLab 这样 当您在 GitHub 中创建新的存储库时 GitLab 中的存储库将自动创建 并充当拉取镜像
  • 哪个是更智能的 git 协议,ssh 或 git(通过 ssh)或 https 协议?

    哪个高效 SSH 或 Git 文件压缩 我对 Git 的理解是 git 协议很智能 因为通信两端都有一个协议代理来压缩文件传输 从而通过有效地使用网络带宽来实现更快的克隆 From 我发现了以下说法 For secure authentic
  • .gitconfig 别名函数调用

    我在 gitconfig 中定义了以下别名 alias teamcity tc tc是我在我的中定义的一个shell函数 bashrc文件 由于某种原因 我收到以下错误 aafghani 03 git workday amirafghani
  • git 别名中的 AWK 语句

    我正在尝试创建一个 git 别名来以特定格式打印日志中的所有拉取请求 但是 我在使用 AWK 删除双空格时遇到问题 这是使用以下命令的 git log 的输出 git log merges grep pull request pretty
  • 默认情况下 git merge -Xignore-space-change

    我该如何设置该选项ignore space change对于所有合并使用git config 我也许可以使用别名merge 但因为我希望该设置应用于git stash pop git stash apply git pull and git
  • 在 Azure DevOps 项目之间移动存储库时保留拉取请求

    我在同一帐户内有两个 Azure DevOps 项目 我想将存储库从一个项目移动到另一个项目 这一页探索如何在具有完全保真历史记录的团队项目之间移动 git 存储库 https learn microsoft com en us azure
  • if else 在 ansible 打印语句中

    我需要有关具有多个条件的打印语句的语法的帮助 目前 报价为 inventory hostname 导致错误 如果我删除剧本运行的引号 但列出文本 inventory hostname 而不是变量 我想知道如何打印变量以及 if else 语
  • 创建一个空分支?

    我有一个包含项目的 git 存储库 我现在要对这个项目进行大规模的修改 如何为这次大修创建一个空白的新分支 然后当完成时 如何将这个分支切换到master 使用 checkout orphan 命令 git checkout orphan
  • 包含 contains 的 json 格式查询

    我在 ansible 中有以下 json 输出 active transaction null cores 4 hostname alpha auth wb01 active transaction null cores 4 hostnam
  • 如何使用 Git 跟踪目录而不是文件?

    我最近开始使用 Git 但只有一件事遇到了麻烦 如何在不跟踪目录内容的情况下跟踪目录 例如 我正在开发的网站允许上传 我想跟踪上传目录 以便在分支等时创建它 但显然不是其中的文件 在开发分支中的测试文件或主控中的真实文件 在我的 gitig
  • 带有 git Remote 的 Gem 文件在 Heroku 推送上失败

    我的 gemfile 中有以下行 gem client side validations git gt email protected cdn cgi l email protection Dakuan client side valida
  • 为所有子文件夹设置 git 配置值

    我知道可以设置每个存储库的配置来覆盖用户级配置 即 path to my repo gitconfig覆盖 gitconfig 是否可以设置 git 配置来覆盖给定文件夹的所有子文件夹的用户级设置 即 我有 topLevelFolder1
  • 自定义 SSH 端口上的 Git

    我的 VPS 提供商建议我将 SSH 端口保留为他们默认分配的自定义端口号 不是 22 问题是 虽然我知道我可以在创建远程配置时提供端口号 但在进行 Git 克隆时似乎无法提供相同的操作 我在用gitolite https wiki arc
  • git reflog 和 log 有什么区别?

    手册页说 log 显示提交日志 reflog 管理 reflog 信息 reflog 信息到底是什么 它有哪些日志没有的信息 日志看起来更详细 git log显示当前的 HEAD 及其祖先 也就是说 它打印提交 HEAD 指向的提交 然后打
  • 如何在不在存储库中的情况下执行 Git 命令?

    有没有一种方法可以在不位于存储库的情况下对存储库执行 Git 命令 例如这样的事情 git home repo log 请不要告诉我cd到它 我正在通过一个exec call Use C作为 git 的第一个参数 git C home re
  • git 是否有任何静态接口?

    我一直在寻找一个宁静的 git api 但似乎没有找到 我得到的最接近的是 Github 的 api 来访问一些存储库信息 还有其他的实施吗 Orion Git API http wiki eclipse org Orion Server
  • local_action:shell 连接文件时出错

    我的剧本中有这样的错误 为什么以及如何解决它 获取远程主机的更新列表 将列表连接到一个文件中 name Save update deb packs in file on ansible host copy content update de
  • 是否可以检测 http git 远程是智能还是愚蠢?

    我正在我的应用程序中实现一个选项来使用 depth 1制作 git repo 的最小功能克隆 我刚刚意识到愚蠢的 http 传输不支持 depth 我想自动检测 http 远程是愚蠢的还是聪明的 这样我就可以省略 depth与哑 http
  • git 推送到 github 失败并显示“错误:pack-objects 因信号 967 死亡”

    我触发了这个命令 git push origin master 我得到这个结果 Counting objects 15626 done Delta compression using up to 4 threads error pack o
  • 为 RHEL 6 安装/构建 git-svn

    我无权访问 RHEL6 存储库 那么在 RedHat Enterprise Linux 6 上构建和 或安装 git svn 工具的最佳方法是什么 通过卸载现有的 yum擦除git 并从源安装最新的来设法安装git和git svn 1 7

随机推荐

  • 使用 WTForms 和 Flask 预填充编辑表单

    我可以使用 WTForms 和 Flask 向数据库添加新条目 并且也可以进行编辑 问题是我需要以编辑表单显示数据库中已存在的信息 我有以下代码 编辑帖子表单的类 class editPostForm Form postTitle Text
  • 尝试使用 Python 通过 API 访问数据时出错

    尝试使用 API 访问有关服务器存储的详细信息时出现错误 我想提取备份状态state在 JSON 中 storage access private backup rule backups backup license 0 part of p
  • 未定义方法 stringify!使用meta_search和active_admin gems时出错

    我正在使用 active admin gem 并且由于它需要 meta search gem 所以我想在管理页面之外提供搜索功能 当我向 Model search 方法提供字符串时 出现未定义的方法错误 根据meta search文档 这就
  • 如何在 Docker 中处理持久存储(例如数据库)

    人们如何处理 Docker 容器的持久存储 我目前正在使用这种方法 构建图像 例如对于 PostgreSQL 然后使用以下命令启动容器 docker run volumes from c0dbc34fd631 d app name post
  • .NET 中的“美国东部标准时间”与“东部标准时间”

    在列出所有Id的属性TimeZoneInfos 返回者TimeZoneInfo GetSystemTimeZones 出现两个版本的 EST 美国东部标准时间和东部标准时间 有什么不同 我还看到美国山地标准时间和山地标准时间 但我很确定这是
  • JDBC 程序中的 java.lang.ClassNotFoundException [重复]

    这个问题在这里已经有答案了 我正在 java SE 7 中制作一个简单的 JDBC 程序 但在编译程序后 它给出了 java lang ClassNotFoundException org postgreasql Driver 错误 我按照
  • Delphi快速加大整数?

    function AddNumStrings Str1 Str2 string string var i integer carryStr string worker integer workerStr s string begin Res
  • 如何使用同一个工人让芹菜重试?

    我刚刚开始在 Django 项目中使用 celery 并且有点陷入这个特定问题 基本上 我需要将长期运行的任务分发给不同的工作人员 该任务实际上分为几个步骤 每个步骤都需要相当长的时间才能完成 因此 如果某个步骤失败 我希望 celery
  • mclapply 与大对象 - “序列化太大,无法存储在原始向量中”

    我一直遇到一个问题multicore包裹和大物体 基本思想是我使用 Bioconductor 函数 readBamGappedAlignments 读取大对象 我有一个文件名的字符向量 并且我一直在使用mclapply循环遍历文件并将它们读
  • iOS7 中旋转后 UITextview 文本不显示顶行

    我有一个包含显示静态文本的 UITextview 的应用程序 我使用 UITextview 来滚动文本 该文本比 UILabel 中可以显示的长得多 由于某种原因 iOS 7 下 UITextview 中的文本在旋转后不会保持滚动到顶部 在
  • Django /subdirectory/admin/ 重定向到 /admin/login/?next=/admin/

    我在端口 8011 上设置了一个 Django 服务器 并让 nginx 将其作为端口 80 上的子目录 静态文件 很好 页数 不错 但是当我访问 subdirectory admin 时 它需要我 admin login next adm
  • 是什么限制了我的 PHP 资源?

    我在从 PHP 中获取更多内存时遇到问题 这是错误消息 Fatal error Allowed memory size of 20971520 bytes exhausted tried to allocate 82 bytes in Ye
  • 存储大量数据的最智能方式

    我想通过 REST 请求访问 flickr API 并下载大约的元数据 1 张 Mio 照片 也许更多 我想将它们存储在 csv 文件中 然后将它们导入 MySQL 数据库以进行进一步处理 我想知道处理如此大数据的最明智的方法是什么 我不确
  • 在 fancybox 中加载图像 150% 的大小

    我只是创建一个愚蠢的 GIF 画廊 其中显示一个缩略图 单击时相关的 GIF 将被加载并显示在一个 fancybox 中 我的 fancybox 的代码是这样的 fancyGIF fancybox arrows false openEffe
  • XML 元素和命名空间

    我有以下方法来解析 XMLElements DisplayMessages XElement root var items root Descendants Item foreach var item in items var name i
  • D 中的模板参数推理

    我正在编写一些对静态 D 数组进行操作的向量函数 如下所示 real N unit uint N real N v real N u v norm v explicit type necessary to force slice opera
  • iOS 即席分发

    我目前已经完成了 iOS 应用程序的制作 我想使用临时分发方式在我的同事之间分发该应用程序 我只有两个月的 XCode 经验 对于向同事发送应用程序需要哪些材料 我感到很困惑 我不想犯下无法挽回的错误 为了将应用程序分发给其他人 我需要捆绑
  • pdf生成后如何打开打印对话框?

    我编写了一些动态生成 PDF 文件的操作 类似 reports reportGenerator action 当我打电话时reports reportGenerator param dialy它将在弹出窗口中打开生成的 pdf 然后我可以按
  • 我可以向同一台服务器发出 CURL 请求吗?

    我需要实现一种方法来对位于同一服务器或另一服务器上的页面进行 POST 调用 我们不能使用 include 因为我们调用的文件通常调用不同的数据库或具有相同名称的函数 我一直在尝试使用curl 来实现这一点 虽然它在从另一台服务器调用文件时
  • 跟踪文件但将其从 git 包中排除

    我有一个有点复杂的 ansible 工作流程 我有两个气隙网络 我在两个网络上开发剧本 所以我有两个由 git 管理的有点独立的 ansible 存储库 同时 大多数剧本都可以在这两个地方使用 使事情复杂化的是 这是一种单向转移 我可以从网