如何将git commit date插入正在提交的文件中?

问题描述 投票:0回答:1

我正在执行需要将git commit date写入要提交的文件之一的任务。我需要在两种情况下进行:

  • 虽然分支被推送到远程仓库中
  • 同时合并到母版中

具体来说,更改应如下所示:

提交前:private String DATE="$DATE$"

提交后:private String DATE="$DATE: 2020-05-08 18:19:25 $"

[到目前为止,我已经尝试过:

我遵循了https://git-scm.com/book/en/v2/Customizing-Git-Git-Attributes#Keyword-Expansion,并在我的项目中添加了.gitattributes,.gitconfig,.git_filters(具有污点和干净的过滤器)。

以下是我在项目中配置的内容:

  • 。gitConfig:
    clean  = .git_filters/dater.clean
    smudge = .git_filters/dater.smudge %f 
  • 。gitAttributes:
*.java filter=dater 

  • 。git_filters :(在父存储库下创建了单独的文件夹)
dater.clean:

#!/usr/bin/sh

sed s/$Date$/`date +%Y%m%d`/g 

dater.smudge:

#! /usr/bin/env ruby
data = STDIN.read
last_date = `git log --pretty=format:"%ad" -1`
puts data.gsub('$Date$', '$Date: ' + last_date.to_s + '$')

[当我尝试使用上述配置时..它不起作用..寻求帮助来解决此问题,请...

git version-control versioning
1个回答
1
投票

涂抹和清洁过滤器是正确的选择,但是您将必须使用gitattributes(7)中所述的过滤过程。之所以需要这样做,是因为当在结帐过程中冒用提交时,HEAD尚未更新,因此无法查询给定修订的日期。

在最近的Git版本中(肯定是2.26,但可能是2.25),您可以使用过滤器过程来获取提交(如果可用)。如果提交ID可用,则可以在传递给过滤过程的元数据中查询treeish。如果可用,那将是一个提交,如果没有,则将是一棵树(或不存在)。如果不是提交,则应该可以使用HEAD

[仅当使用smudge时,此元数据不会使用cleanfilter-process传递,因此,如果需要此功能,您确实需要创建一个小的过程过滤器。

[此外,请注意,您的干净过滤器应删除日期,而不应将其实际包含在提交中。如果将日期存储在实际提交中,那么每次合并分支时都会遇到合并冲突。

最后,所有这些都可以避免,如果您不必在每个类中都使用此DATE字段,则可以采用更简单的解决方案。如果您的项目中包含一个带有元数据的静态类,则可以在其中放置DATE字段,通过调用Git将其创建为构建步骤之一,并完全放弃过滤器。这将变得更容易,更快和更简单。如果需要生成tarball,则可以在tarball生成时生成此文件。

© www.soinside.com 2019 - 2024. All rights reserved.