Git:防止暂存某些文件,自动暂存所有文件

Cod*_*256 5 git git-stash git-stage

我想取消暂存当前工作副本中的所有内容,但会自动暂存我将来编辑的所有文件和大块

例如,我使用的 CocoaPods 版本与我正在从事的项目中的大多数其他人不同。我想升级配置文件的配置以与我的 CocoaPods 兼容,而不会破坏他们的。最简单的方法是不在拉取请求中包含新配置,但这意味着我无法构建。隐藏和弹出将不起作用,因为如果我在编辑配置后隐藏然后应用我的更改,弹出将修复配置但撤消我的更改。

我应该如何解决这个问题?

Von*_*onC 3

一种方法是以仅您本地可见的方式修改该配置文件。
但在某种程度上,该存储库的其他用户仍然不可见。

如果这些修改定义良好(并且不是到处都是your.config.file),那么您可以考虑使用内容过滤器驱动程序,以便在签出时为该配置文件生成正确的内容:

(在本地存储库的根文件夹中编辑或创建一个.gitattributes文件,然后在其中添加上面的行。您可以添加、提交和推送该文件:它不会对其他用户产生任何影响)。

弄脏
(图片来自《自定义 Git - Git 属性》,来自《Pro Git book》)

cd /path/to/your/local/cloned/repo
git config filter.filterconfig.smudge 'update_config'
git config filter.filterconfig.clean 'restore_config'
Run Code Online (Sandbox Code Playgroud)

和脚本可以位于本地的任何位置(即使您在 Windows 上,它们也位于 bash 中,因为它们将由 mingw git bash 执行)update_configrestore_config$PATH

update_config脚本将:

  • 制作配置文件的初始副本,
  • 将其修改注入配置文件中。

这样,git pull触发工作树更新的 a 将自动重新生成配置文件内容以及所需的本地修改。

restore_config每当 git 调用该脚本时,该脚本都会恢复已保存的文件副本(例如,它将由 agit status或 a触发):git diff

cat saved_copy
Run Code Online (Sandbox Code Playgroud)

这样,就 git 而言,配置文件似乎永远不会改变。