Git Extensions : rcs-keywords, 涂抹并清洁过滤器

标签 git git-extensions version-control-keywords

首先,我必须说我是 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/

相关文章:

git - 什么是 Git 剪枝?

Git 错误 "non-monotonic index"

svn - 当我使用 svn :keywords 时如何设置 subversion 的作者姓名

git - 我如何将我最后的 N 提交压缩在一起?

Git : Failed at pushing to remote server, ' REPOSITORY_PATH ' 不是git命令

git - 远程仓库文件名的大小写与本地不同,但没有看到任何变化

linux - 如何为 Git 命令设置自动完成功能?

Git 卡在 POST git-receive-pack 上