1

我正在做一个有一些不寻常行为的项目:

源代码中的文件之一是包含重要代码的文件,但它可以自行编辑以包含一些配置。这是否是好的设计是一个不同的讨论,但为了能够测试我的项目,这个文件需要处于修改状态。

在我提交任何事情之前,我通常会对我的贡献前后的情况进行 AB 比较。我git stash用来在基本副本和脏工作副本之间切换。问题是在使用时git stash,它也会恢复我的配置。

我目前的解决方法很麻烦:我执行 a git add path/to/settingsfileand then git stash --keep-index,但我不喜欢这种解决方法。除非我另有说明,否则是否有更优雅的解决方案让 git 忽略对此文件的所有修改?

4

1 回答 1

1

请参阅“在分支签出之间保留 git --assume-unchanged 文件

 git update-index --skip-worktree -- path

这不会从git stash.


原始答案

来自“暂时忽略文件”:

 git update-index --assume-unchanged <file>

这将允许忽略对该特定文件的更改。如果您想恢复代码更改同时将配置更改保留在同一个文件中,
这将无济于事。

并且 git stash 仍然会恢复它:如何防止 git stash 使用“假设不变”位删除对文件的更改?


请注意,在 Git 2.25(2020 年第一季度)之前,“git stash保存”在稀疏签出的工作树中错误地删除了感兴趣区域之外的路径。

请参阅Johannes Schindelin ( ) 的提交 4a58c3d提交 8dfb04a(2019 年 10 月 30 日(由Junio C Hamano 合并——提交 57b5301中,2019 年 11 月 10 日)dscho
gitster

stash:正确处理跳过工作树文件中的阶段性更改

签字人:约翰内斯·辛德林

git stash在为标记有该skip-worktree位的文件(例如,在稀疏检出中排除的文件)暂存更改时调用时,这些文件将被记录为已删除

原因是git stash试图通过将索引复制到临时索引然后更新工作树中的文件来构建反映工作树的树。
至关重要的是,它还要求git diff-index更新 HEAD 中但未在索引中暂存的那些文件。

但是,当临时索引通过 更新时git update-index --add --remove,skip-worktree 条目会将文件标记为误删除。

让我们使用新引入的--ignore-skip-worktree-entries选项git update-index来防止这种情况发生。

请注意,回归测试用例故意避免复制上述场景,而是尝试仅重新创建症状。

丹汤普森报道。

于 2012-12-11T10:25:20.877 回答