暂时忽略文件,直到它发生变化

  • 本文关键字:变化 文件 git
  • 更新时间 :
  • 英文 :


我的工作空间中有许多文件,其中有我永远不想提交的小更改,但我想知道当我在其中添加新更改时。

  • 示例1:使用lernaMakefile,但由于我几乎从不使用,并且不想在全局安装它,因此我在本地版本中用npx lerna替换了lerna。我不应该提交这个文件,而且我不能忽略这个文件,因为我需要跟踪我对它所做的任何其他更改。

  • 示例2:一个包含到后端API的链接的文件,每个开发人员根据其家庭网络使用不同的IP地址设置该链接。

  • 示例3:一个dockerfile,为每个开发人员不同的公钥在容器中设置一个环境变量。

我还有很多。

因此,浏览我的git更改需要花费时间,因为git状态被许多不需要的文件打乱了。

  • 方案一:.gitignore

这不是一个有效的解决方案,因为如果我更改了makefile或dockerfile以外的东西,我想知道文件是不同的,我需要提交新的更改。

  • 方案二:git update-index --assume-unchanged

git update-index --assume-unchanged file然后git update-index --no-assume-unchanged file

这不是一个有效的解决方案,因为如果我将makefile或dockerfile标记为"假设不变",并且我做了一个重要的修改,那么该文件将不会显示在git状态中,除非我记得我需要对它应用--no-assume-unchanged

我正在寻找一个解决方案,基本上隐藏文件从我的本地变化,而它保持完全相同。然后,如果我更改了内容,它会再次显示,提醒我在里面做了新的修改。

我该怎么做呢?

我正在寻找一个解决方案,基本上会隐藏文件从我的局部变化,但它保持不变。然后,如果我改变内容,再次显示,提醒我做了新的修改里面。

这是Git所做的在默认情况下对于最新提交的内容。

解决方案是提交本地更改。你可以使用一个私有的本地分支,你可以不断地把它重置到"官方的"分支上。

老实说,我不认为这是git应该解决的情况,但这里有一个解决方案,可能对这种情况太复杂了。

这个想法是有一个快照文件夹,在其中保存您想要忽略的文件的副本(直到没有更改)。这个文件夹必须被忽略,所以在.gitignore:

snapshot/

假设您在根文件夹中有一个Dockerfile,您创建具有相同内容的文件snapshot/Dockerfile。显然,Dockerfile没有被忽略,因为您仍然希望检测更改,但是您还希望将其从git status输出中排除。从最后一个开始,最简单的方法是创建一个像

这样的本地别名
git config alias.filter-status '!git status | grep -Ev ".*(Dockerfile|other_pattern_to_ignore).*"'

调用
git filter-status

这个别名显示git status的每一行,除了那些匹配指定模式的行。它会给出你想要的输出,当然,除非某些git描述与你的模式匹配。你唯一失去的是颜色。

现在的最后一部分:如何总是排除Dockerfile只有当它没有改变?下面是snapshot文件夹发挥作用的地方:首先添加一个pre-commit钩子,该钩子将使用

卸载Dockerfile(以及要排除的所有文件)。
git restore --staged Dockerfile

,除非Dockerfilesnapshot/Dockerfile不相同。在本例中,您不需要卸载它,因为您希望提交这些更改,并且您还需要使用新的Dockerfile更新快照版本。当其他开发人员不得不对Dockerfile进行pull更改时,缺点是显而易见的:他们必须记得用合并的版本更新snapshot文件夹。

顺便说一下,我不确定这是一个有效的解决方案,有一件事是肯定的:我不会用git来解决它。例如,关于Dockerfile,您不能使用您所忽略的.env文件吗?

相关内容

  • 没有找到相关文章

最新更新