Git Extensions:rcs-keywords,smudge和clean filter

时间:2014-04-10 14:27:16

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

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

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

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

我现在正在按照https://github.com/kimmormh/git-rcs-keywords的指示进行操作(与操作系统相关的一些小改动,我使用Windows,以及包含空格的文件路径)。

提前致谢!

1 个答案:

答案 0 :(得分:0)

拉动时,在快速转发磁头之前运行涂抹过滤器。默认情况下,许多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挂钩中,您必须先撤消更改。