3

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

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

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

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

提前致谢!

4

1 回答 1

0

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

$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-04-11T10:17:03.390 回答