git - 从其他机器上删除以前的 .gitignored 文件的最佳方法是什么?
问题描述
我有一个项目,它在启动时将三个文件 A、B、C 之一从一个地方复制到另一个地方(取决于项目配置)。这个复制的文件 X 是 .gitignored 并且始终具有相同的名称,并且只有原始文件 A、B、C 被提交给 git。我现在正在删除这个复制逻辑,并且需要确保这个 .gitignored 文件 X 被从其他人的机器上删除。最好的方法是什么?
到目前为止,我有几个想法:
- 保留.gitignore,不要删除文件 (乱七八糟,我不想这样做)
- 更新项目启动逻辑以始终删除文件(如果存在),然后在它在大多数开发人员机器上运行几周后删除该逻辑,并发送消息告诉其他人如果看到它就删除它 (有点奇怪,但这首先匹配文件在所有其他机器上的创建方式。但必须发送消息并不理想)
- 提交文件,然后删除文件 (这可以工作,但感觉很奇怪。1)我不知道这将如何在所有开发人员机器上工作,因为我们正在添加然后删除一个已经被忽略的文件,2)不同的机器有这个文件的不同版本,我不想弄乱历史)。
有没有其他人遇到过这类问题并知道是否有明显的最佳答案?我正在寻找最简单的部署机器(文件实际上已删除)和我们所有的开发机器(人们不必处理一些刚刚弹出的新的未跟踪文件)。
解决方案
在您列出的三个想法中,#2 是唯一实现目标的想法。
特别是,提交文件,然后提交删除,确实在一种特定条件下工作:其他人检查文件存在的提交,然后检查文件不存在的任何提交。第一步——可能需要他们绕过 Git 关于破坏未跟踪文件的反对意见——将提取的文件放入 Git 的索引中。随后切换到文件不存在的提交是 Git删除文件的原因:它在他们的工作树中,并且与索引副本匹配,切换到另一个提交表示删除文件,所以 Git 删除与索引副本匹配的文件,同时它也在删除索引副本。
如果此存储库克隆的其他用户直接从缺少文件的提交a123456
(或任何可能的哈希 ID)跳过b789abc
到继续缺少文件的最新提交(即使中间提交deadbeef
提交文件),他们的 Git 将继续将其工作树中的跟踪文件视为其工作树中的未跟踪文件。如果文件不再列在.gitignore
(在 commit 中b789abc
),他们的 Git 随后会抱怨未跟踪的文件,但不会删除它。
(顺便说一句,这更多地证明了 Git 不是部署系统。部署系统将提供创建、删除和/或存档此文件 X 的方法。)
推荐阅读
- reactjs - 页面无响应 | 条件渲染
- c# - 自定义搜索框不过滤最顶部的 ListBoxItem
- postman-pre-request-script - 邮递员 sendRequest 函数不发送请求正文
- node.js - 您如何使用 node stream.pipeline 并使用 promisify 合并 png
- react-native - 找不到内部的testID
来自 iOS 设备的 appium 中 react-native 的标签/组件 - python - 如何在接收和阻止鼠标点击的同时使 pygame 窗口透明?
- python - 如何判断两个整数是偶数还是奇数
- reactjs - 在useEffect中创建一个异步函数,并在函数的while循环中使用await,似乎不起作用
- sql - 您如何将具有相同值的项目成对分组?- SQL
- javascript - 为什么我的 javascript 中的 input.value 总是返回一个空字符串?