我很难理解git diff,感谢您对此的帮助。
场景:
鉴于作为工作流程的一部分进行此类更改,我需要知道<seasonTeamId>
何时更改,然后相应地修改其他文件。所以我需要将这些数字提取为变量。
例如,我需要知道 ID 18452008更改为 22521759,以便我可以更新另一个包含旧 ID 的文件。
挑战:
XML 中有多个<seasonTeamId>
。我们俱乐部的每个团队一个。碰巧的是,更新可能包括一个或多个团队的 ID 更新。
我可以使用sed更新另一个文件。但我很难检测到更改并将 ID 提取为变量。
我认为带有grep和正则表达式的git diff可以实现这一点。
RegEx : /(?<=<seasonTeamId>).*[0-9](?=</seasonTeamId>)/gm
git diff 让我的头脑混乱,文档和教程都没有帮助
您实际上可以使用git
访问文件的完整内容(而不仅仅是差异)。因此,如果您以某种方式知道文件sams/club.xml
是由提交<xyz>
更改的,则可以:
-
修改后访问其内容:
git show <xyz>:sams/club.xml
-
在修改之前访问其内容
# <xyz>~ is one way to say "the parent commit of <xyz>" git show <xyz>~:sams/club.xml
从那时起,您可以从每个文件中获取该特定标识符。
例如,使用 XML 解析器:
after=$(git show <xyz>:sams/club.xml | xq '.id')
before=$(git show <xyz>~:sams/club.xml | xq '.id')
# do something with $after and/or $before ...
在上面,<xyz>
可以替换为:
- 提交 sha:
eacf32d19....
(完整或简短版本) - 分支名称:
master
,develop
-- 表示"该分支的现任负责人"> - 标签名称 :
v1.1.2
-- 表示"该标签指向的提交"> - 远程分支名称:
origin/master
HEAD
(或单独@
) -- 表示"当前活动提交">- 等。。。
所有血腥的细节都可以在git help gitrevisions
中找到