切换分支时如何忽略某些文件中的某些更改?

Posted

技术标签:

【中文标题】切换分支时如何忽略某些文件中的某些更改?【英文标题】:How to ignore certain changes in some files when switching branches? 【发布时间】:2021-10-25 23:08:17 【问题描述】:

我认为许多销售代表的某些文件包含一些敏感信息,例如哈希键、特定环境变量或某些与用户相关且不提交的机器特定配置。 有没有一种方法可以在分支之间切换,而不必每次都暂存、存储和取消存储这些更改,也不必将这些文件添加到 .gitignore?

【问题讨论】:

尽可能不要将敏感数据存储在 Git 存储库中。如果必须,请不要将此 Git 存储库提供给其他任何人。 (请注意,您的 working tree 实际上并不 in 存储库,因此在适当的 other 预防措施下,将此类文件存储在工作中是安全的树:只是不要将它们添加到存储库中!) ***.com/a/22171275/7976758, ***.com/a/1976900/7976758 【参考方案1】:

一般来说,这是通用问题的一个实例,“如何忽略对跟踪文件的更改?”它是answered in the Git FAQ:

Git 没有提供执行此操作的方法。原因是如果 Git 需要覆盖这个文件,例如在结帐期间,它不知道对文件的更改是否宝贵并且应该保留,或者它们是否无关紧要并且可以安全地销毁。因此,它必须采取安全路线并始终保护它们。

尝试使用git update-index 的某些功能是很诱人的,即假设未更改和跳过工作树位,但这些功能不能正常工作,因此不应以这种方式使用。

如果您的目标是修改配置文件,将文件签入存储库通常会很有帮助,该文件是一个模板或一组默认值,然后可以在旁边复制并根据需要进行修改。这第二个修改过的文件通常会被忽略以防止意外提交。

在这里使用模板并忽略实际配置文件的方法特别有用,因为您绝对不会有人轻率地做git add -u 然后不小心提交了他们的秘密。在这种特殊情况下,您可能会很好地处理一个被忽略的文件,该文件允许用户指定他们的所有秘密,然后根据该文件和模板生成配置文件。

另外请注意,您应该避免将敏感数据存储在 Git 存储库中。存储库或其中的某些文件意外泄漏(笔记本电脑被盗、服务器配置错误等)是很常见的,如果您的秘密不在存储库中,那么它们将不会被暴露。您应该使用大多数 CI 系统都有的适当的秘密存储从环境中注入这些数据。如果您需要使用配置文件,您可以使用上面提到的模板和生成脚本从环境中获取该数据并将其用于您的配置文件。

【讨论】:

以上是关于切换分支时如何忽略某些文件中的某些更改?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Git diff 和 merge 期间忽略某些特定文件和文件夹

git:切换分支并忽略任何更改而不提交

Git 不会忽略 .gitignore 中的某些 Xcode 文件

如何 git-cherry-pick 仅更改某些文件?

在 git 中切换分支时,如何让 Emacs 恢复所有未更改的缓冲区?

更新文件时Git更改默认umask