git - 有没有办法让 git add --patch 跳过所有单行更改?
问题描述
我的团队从我们使用的工具 (Postman) 签入导出的 JSON 文件,以便我们可以轻松共享配置。在最近对该工具的更改中,每次导出时所有 ID(只是 GUID)都会更改。这意味着我们的差异有数百个单行无意义的更改(GUID 更改),然后是我们所做的实际有意义的更改/添加。
如果我们按原样检查,那么变基真的很棘手,因为 ID 似乎是完全随机的,所以我们会得到大量无意义的合并冲突。审查也很烦人,因为我们想要审查的更改被隐藏在数百个其他无意义的更改之下。但是使用git add --patch
基本上是不可能的,因为您必须跳过数百个补丁,然后选择您想要的一个,它可能在文件底部附近。
我想知道是否有任何聪明的脚本技巧可以用来让它自动丢弃所有的单行代码,并且只问我关于超过一行的补丁。我们想要的实际补丁几乎总是比一行长,所以这几乎总是有效的,并且更容易使用。
解决方案
我假设文件列表已明确建立:*.json
文件,存在于一些清晰可识别的目录中,可能具有特定的名称结构......(意思是:您可以轻松地定位这些文件.gitattributes
)
如果是这种情况:您的用例非常适合filter
(带有一clean / smudge
对脚本)在将这些文件添加到 git 时用固定值替换不断移动的行。
这是文档的链接:git 属性
相关图形描述:
要运行的目标“过滤器”脚本应该在 git 的配置中定义,
通过这个过滤器的文件应该在一个.gitattributes
文件中定义。
您需要在每台机器上设置一次以下配置:
部署一个脚本,我们称之为它
normalize-postman-ids
,它会在git add
ing 演示文件时使用,可能是第二个脚本,我们称之为它
insert-valid-postman-ids
,它将在git checkout
提交时使用,在文件中添加一个部分,该部分
.git/config
将描述所谓的 filer :[filter "postman-ids"] clean = path/to/normalize-postman-ids # if the values stored in git can be used straight away: smudge = cat # if you need some action on checkout: smudge = path/to/insert-valid-postman-ids
您需要更新并提交.gitattributes
您的 repo 文件:
在
.gitattributes
文件中,定位应过滤的文件:# .gitattributes : postman*.json filter=postman-ids
推荐阅读
- python - 何时知道使用哪个轴来查找 kNN 算法的距离?
- amazon-web-services - 如果我运行 Cloudwatch,是否需要将原始应用程序日志文件发送到 S3?
- amazon-web-services - AWS 全栈反应应用程序。构建未能成功完成
- javascript - Chrome 无法获取 localStorage
- c# - Unity - 随机空引用问题
- cassandra - 分组依据的 Cassandra 数据建模
- r - 屏幕阅读器无法访问闪亮的应用断开消息
- python-3.x - 变量错误地通过 Elif 语句(Python 3)
- firebase - CocoaPods 找不到 pod "Firebase/Database" 的兼容版本:
- openid-connect - 将 mod_auth_openidc 与登录表单集成