从其他机器上删除以前的 .gitignored 文件的最佳方法是什么?
What's the best way to delete a previously .gitignored file from other machines?
我有一个项目,在启动时,将三个文件 A、B、C 之一从一个地方复制到另一个地方(取决于项目配置)。这个复制的文件 X 被 .git 忽略并且始终具有相同的名称,只有原始文件 A、B、C 被提交到 git。我现在正在删除这个复制逻辑,并且需要确保这个 .gitignored 文件 X 从其他人的机器上删除。执行此操作的最佳方法是什么?
目前我有几个想法:
- 保留.git忽略不删除文件(乱七八糟的,我不想这样做)
- 更新项目启动逻辑以始终删除文件(如果存在),然后在几周后当它在大多数开发人员机器上 运行 时删除该逻辑并发送消息告诉其他人如果他们看到它就删除它 (有点奇怪,但这与文件最初在所有其他机器上的创建方式相匹配。尽管必须发送消息并不理想)
- 提交文件,然后删除文件 (这可以工作,但感觉很奇怪。1)我不知道这将如何工作自从我们添加然后删除一个已经被忽略的文件后,所有开发人员机器,2)不同的机器有这个文件的不同版本,我不想弄乱历史).
有其他人 运行 遇到过此类问题并且知道是否有明显的最佳答案吗?我正在寻找对于部署机器(文件实际上被删除)和我们所有的开发机器(人们不必处理一些刚刚弹出的新的未跟踪文件)来说最简单的方法。
在您列出的三个想法中,#2 是唯一实现目标的想法。
特别是,提交文件,然后提交删除,在一个特定条件下工作:其他人检查提交该文件存在于其中,然后检查该文件不存在的任何提交。第一步——可能需要他们也绕过Git关于破坏未跟踪文件的反对意见——将提取的文件放入Git的索引中。随后切换到文件 不 存在的提交是 Git 删除 文件的原因:它在他们的工作树,并匹配索引副本,并切换到 other 提交说要删除文件,因此 Git 删除与索引副本匹配的文件,同时它也在删除索引副本。
该存储库的克隆的其他用户是否应该直接从缺少该文件的提交 a123456
(或它可能是的任何哈希 ID)跳到继续缺少该文件的最新提交 b789abc
文件(即使中间提交 deadbeef
提交了文件),他们的 Git 将继续将其工作树中的跟踪文件视为其工作树中的未跟踪文件。如果该文件不再列在 .gitignore
中(在提交 b789abc
中),他们的 Git 随后将 抱怨 关于未跟踪的文件,但它赢了删除它。
(顺便说一下,这更多地证明了 Git 不是部署系统。部署系统将提供创建、删除、and/or 归档此文件 X 的方法。)
我有一个项目,在启动时,将三个文件 A、B、C 之一从一个地方复制到另一个地方(取决于项目配置)。这个复制的文件 X 被 .git 忽略并且始终具有相同的名称,只有原始文件 A、B、C 被提交到 git。我现在正在删除这个复制逻辑,并且需要确保这个 .gitignored 文件 X 从其他人的机器上删除。执行此操作的最佳方法是什么?
目前我有几个想法:
- 保留.git忽略不删除文件(乱七八糟的,我不想这样做)
- 更新项目启动逻辑以始终删除文件(如果存在),然后在几周后当它在大多数开发人员机器上 运行 时删除该逻辑并发送消息告诉其他人如果他们看到它就删除它 (有点奇怪,但这与文件最初在所有其他机器上的创建方式相匹配。尽管必须发送消息并不理想)
- 提交文件,然后删除文件 (这可以工作,但感觉很奇怪。1)我不知道这将如何工作自从我们添加然后删除一个已经被忽略的文件后,所有开发人员机器,2)不同的机器有这个文件的不同版本,我不想弄乱历史).
有其他人 运行 遇到过此类问题并且知道是否有明显的最佳答案吗?我正在寻找对于部署机器(文件实际上被删除)和我们所有的开发机器(人们不必处理一些刚刚弹出的新的未跟踪文件)来说最简单的方法。
在您列出的三个想法中,#2 是唯一实现目标的想法。
特别是,提交文件,然后提交删除,在一个特定条件下工作:其他人检查提交该文件存在于其中,然后检查该文件不存在的任何提交。第一步——可能需要他们也绕过Git关于破坏未跟踪文件的反对意见——将提取的文件放入Git的索引中。随后切换到文件 不 存在的提交是 Git 删除 文件的原因:它在他们的工作树,并匹配索引副本,并切换到 other 提交说要删除文件,因此 Git 删除与索引副本匹配的文件,同时它也在删除索引副本。
该存储库的克隆的其他用户是否应该直接从缺少该文件的提交 a123456
(或它可能是的任何哈希 ID)跳到继续缺少该文件的最新提交 b789abc
文件(即使中间提交 deadbeef
提交了文件),他们的 Git 将继续将其工作树中的跟踪文件视为其工作树中的未跟踪文件。如果该文件不再列在 .gitignore
中(在提交 b789abc
中),他们的 Git 随后将 抱怨 关于未跟踪的文件,但它赢了删除它。
(顺便说一下,这更多地证明了 Git 不是部署系统。部署系统将提供创建、删除、and/or 归档此文件 X 的方法。)