首先,我必须说我是 Git 的新手。所以我还不知道所有的提示和技巧......我有以下问题:
在一个文件中,我有特定的 rcs 关键字(例如 $Date$、$Author$ 和 $Commit$)。这些关键字应该使用污迹过滤器进行更新。过滤器本身按计划工作,请求的信息更新到文件中。但问题是,当 pull (使用 Git 扩展)并且文件通过污迹过滤器过滤时,更新到文件中的数据似乎不是最新的(它来自第二个最新/最新提交)。 pull 后,如果我手动执行在过滤器中发挥神奇作用的命令,数据是正确的。
问题是:是否有任何方法可以按照我现在正在做的方式将最新/最新的数据更新到文件中?
我现在的做法与 https://github.com/kimmormh/git-rcs-keywords 中的说明非常相似(一些与操作系统相关的小变化,我使用的是 Windows,文件路径包括空格)。
提前致谢!
最佳答案
pull 时,在快进头部之前运行污迹过滤器。默认情况下,许多 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`;
考虑到您从远程 pull 的提交。
但是,请注意,在发生 merge 冲突的情况下,FETCH_HEAD 不会变成 HEAD,而是会创建一个特殊的 merge 提交以将 FETCH_HEAD 与分支 merge 。在这种情况下,您可能需要使用 pre-commit
Hook (可能与 post-merge
Hook 一起使用)来确定是否需要再次重新涂抹文件。此外,在运行污迹过滤器时,您还不知道会发生 merge 冲突,因此在 pre-commit
Hook 中,您必须先撤消更改。
关于Git Extensions : rcs-keywords, 涂抹并清洁过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22990965/