4

每次我将源代码检出到 git-hub 服务器时,我都需要更新我的源代码修订关键字(@version、@date 等)。

你可能知道:

在 Git 中这样做的主要问题是,您无法在提交后修改包含有关提交信息的文件,因为 Git 首先校验文件。

基本上我想要实现的是我的源代码应该如下所示:

 * Git revision information:
 * 
 * @version $Revision: 1e7f611039399b32e9000ec454609a0641dde368 $
 * @author  $Author: Eugen Mihailescu <eugenmihailescux@gmail.com> $
 * @date    $Date:   Thu May 3 01:17:45 2012 +0200 $
 * 
 * $Id:  | Thu May 3 01:17:45 2012 +0200 | Eugen Mihailescu  $

在这里这里你可以找到关于如何在 Git 中实现这一点的完整描述。

事实证明,您可以编写自己的过滤器,以便在提交/签出时在文件中进行替换。这些是“清洁”和“涂抹”过滤器。在 .gitattributes 文件中,您可以为特定路径设置一个过滤器,然后设置在文件被签出之前(“涂抹”,参见图 7-2)和提交之前处理文件的脚本。

所以我知道如何用 git 命令来做。我已经测试过,它可以正常工作!我真正的问题是我想通过使用 Eclipse IDE 来实现同样的目标。在 Eclipse 中,我有 Eclipse Git,它是基于 JGit 的 Eclipse Team 提供程序,JGit 是 Git 版本控制系统的纯 Java 实现。

在 Eclipse EGit 中没有这样的命令“git checkout”,但可以通过硬重置来完成(右键单击您的项目,然后选择团队 -> 重置 -> 硬)。不幸的是,这不会运行您的清洁/涂抹过滤器,实际上您将从 git hub 获得源代码的纯副本,而无需关键字扩展。

我希望我已经详细描述了整个故事,因为现在我要问:

  • 这在 Eclipse 中使用 EGit 可行吗?
4

1 回答 1

1

提交(2010 年 8 月)评论

在 WorkingTreeIterator 期间执行自动 CRLF 到 LF 的转换

WorkingTreeIterator现在可以选择对文本文件执行 CRLF 到 LF 转换。
保留了一个基本框架来支持基于 启用(或禁用)此功能gitattributes,并支持更通用的涂抹/清洁过滤器系统。
由于gitattribute在 JGit 中尚不支持,因此未实现,但mightNeedCleaning(),isBinary()filterClean()方法将在未来提供合理的插入位置。

我不认为在最新的 JGit 版本gitattribute中完全支持,并且最新版本仍然有一个空函数。WorkingTreeIteratorfilterClean()

因此,单独使用 JGit 可能不足以触发您的“过滤内容”驱动程序。

于 2012-05-03T07:01:27.660 回答