在 Git 更新后使用旧值和新值



我很难理解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....(完整或简短版本)
  • 分支名称:masterdevelop-- 表示"该分支的现任负责人">
  • 标签名称 :v1.1.2-- 表示"该标签指向的提交">
  • 远程分支名称:origin/master
  • HEAD(或单独@) -- 表示"当前活动提交">
  • 等。。。

所有血腥的细节都可以在git help gitrevisions中找到

最新更新