【问题标题】:Git Extensions: rcs-keywords, smudge and clean filtersGit 扩展:rcs 关键字、涂抹和清洁过滤器
【发布时间】:2014-04-10 14:27:16
【问题描述】:

首先,我必须说我对 Git 很陌生。所以我还不知道所有的技巧和窍门......我有以下问题:

在一个文件中,我有某些 rcs 关键字(例如 $Date$、$Author$ 和 $Commit$)。这些关键字应该通过使用涂抹过滤器进行更新。过滤器本身按计划工作,请求的信息会更新到文件中。但问题是,似乎在拉取(使用 Git 扩展)并且文件通过污迹过滤器过滤时,更新到文件中的数据不是最新的(它来自第二次最新/最新提交)。拉后如果我手动执行在过滤器中发挥作用的命令,数据是正确的。

问题是:有没有办法以我现在正在做的方式将这些最新/最新数据更新到文件中?

我现在的操作方式与https://github.com/kimmormh/git-rcs-keywords 中的说明非常相似(一些与操作系统相关的小更改,我使用的是 Windows,以及包含空格的文件路径)。

提前致谢!

【问题讨论】:

    标签: git git-extensions version-control-keywords


    【解决方案1】:

    当你拉动时,污迹过滤器在 head 快进之前运行。 许多 git 命令默认在 HEAD 上运行。特别是,您正在使用或基于您工作的 rcs-smudge filter 执行以下操作:

    $rev = `git log -- $path | head -n 3`;
    

    相当于,

    $rev = `git log HEAD -- $path | head -n 3`;
    

    在您的情况下,这样做可能更正确:

    $rev = `git log FETCH_HEAD -- $path | head -n 3`;
    

    说明您从远程提取的提交。

    但是,请注意,在合并冲突的情况下,FETCH_HEAD 不会成为 HEAD,而是会创建一个特殊的合并提交以将 FETCH_HEAD 与分支连接起来。在这种情况下,您可能需要使用pre-commit 挂钩(可能与post-merge 挂钩)来确定是否需要再次重新涂抹文件。此外,在运行污迹过滤器时,您还不知道会有合并冲突,因此在 pre-commit 挂钩中,您必须先撤消更改。

    【讨论】:

      猜你喜欢
      • 2014-05-19
      • 1970-01-01
      • 2015-11-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-20
      • 1970-01-01
      相关资源
      最近更新 更多