如何自定义diff git以忽略码日期生成

如何自定义diff git以忽略码日期生成,git,yard,Git,Yard,我正在使用生成项目的文档。即使文档可以生成,因此不需要进行版本连接,我们还是决定这样做,因为这样可以更容易地看到实际文档中代码(注释)更改的影响 问题是每次生成文档时,它都会更改每个文件开头的日期,从而导致所有文件都被视为已更改 有没有一种方法可以告诉git忽略这些行以检测文件是否已更改,或者配置yard以在文件相同时不重新生成文件 谢谢 更新 我知道我可以做一个脚本或者其他任何事情,只要日期改变就可以清理文件。 所以我的问题是有一个Git方法可以做到,即我应该阅读关于diff驱动程序的文章,还

我正在使用生成项目的文档。即使文档可以生成,因此不需要进行版本连接,我们还是决定这样做,因为这样可以更容易地看到实际文档中代码(注释)更改的影响

问题是每次生成文档时,它都会更改每个文件开头的日期,从而导致所有文件都被视为已更改

有没有一种方法可以告诉git忽略这些行以检测文件是否已更改,或者配置yard以在文件相同时不重新生成文件

谢谢

更新 我知道我可以做一个脚本或者其他任何事情,只要日期改变就可以清理文件。 所以我的问题是有一个Git方法可以做到,即我应该阅读关于diff驱动程序的文章,还是应该编写干净的脚本

如果我正在走向清理路径,那么使用git钩子或者将其集成到文档生成中会更好吗

最后,我对跟踪由于生成的文档中的特定提交而引起的更改的任何其他方法感兴趣

我还没有真正解释我的问题是什么(以及为什么我试图对不需要的东西进行版本化),所以我们就开始了

有时,代码中的一点修改会破坏文档,因此我可以看到提交对文档的影响

例如: 我将modeline用于vim(文件第一行的注释告诉vim不同的信息)

我知道我有一个包含模块文档的文件

#vi: my vim setting 
# Documentation of module A
module A
  .... some code

end
我在别的地方用这个模块

#vi : my vim setting

           ( 2 blank lines)
module A
   .... some different code
end
此时,一切正常,A的文档将是模块A的
文档
。但是,如果有人(比如我)删除了最后一个文件中的一个空行,只留下一行(是的,我在模型线和代码之间留了两行空行),那么我认为模型线是模块a的文档,它将是
vi:my vim setting


问题是,除了查看每一页之外,没有办法检测出文档是否出错。使用git,我可以快速查看和检查更改的内容,甚至可以找到更改的时间(这很重要,因为这样我可以找出更改的原因)。

我不熟悉yard,但无法让git忽略文件的某些部分

最简单的解决方案是修改构建过程以运行自定义脚本,该脚本从生成的文件中删除数据,或者在仅更改日期时检查git diff,在这种情况下恢复日期更改


但是,根本不控制任何生成的代码/文件的版本会更干净。

不是直接的答案,只有元素:

  • git diff
    具有
    -G
    选项,仅保留与特定regexp匹配的修补程序。似乎没有一个标志来排除与日期行匹配的行,但也许您会有足够的想象力来构建一个regexp,它可以保留除日期行以外的任何内容
  • diff
    有这样一个选项(
    diff-I
    ),因此,如果您能够找到一种方法将git生成的diff馈送给diff,您就可以开始了
  • 是一个图形化的差异查看器,它可以很好地与git配合使用——例如,在项目的目录上调用
    meld dir/
    ,会打开一个窗口,显示与
    HEAD
    不同的所有文件,并且可能需要regexp忽略某些行(编辑>首选项>文本过滤器)。它是为linux发行版(至少是Ubuntu)打包的,该网站声称它也在MacOS X和Windows上运行(我还没有试过)
  • 我还没有尝试所有与git集成的difftools,但它们可能提供类似的功能

    • 我几乎也有同样的问题。不是文档,而是IDE设置更改日期和时间的源文件。每次都是节省

      要求在提交之前将此日期和时间设置为“漂亮”,这意味着没有秒,分钟应四舍五入到15

      我认为最好的方法是创建小型git命令,以便在提交之前清理代码。插件。将其命名为
      git cleanup
      ,并将其放置在
      c:\Program Files(x86)\git\libexec\git core
      (我正在使用Windows)

      所以现在在执行
      git commit
      之前,我正在运行
      git cleanup
      ,它完成了所有的工作。实际上,我甚至认为可以一次性运行它,比如
      git cleanup&&git commit-a-m“commit message”
      。或为此命令创建自定义别名

      我使用了
      ruby
      来创建这个小脚本。但是你可以使用你选择的语言。Git允许这样做。

      不要这样做 可以从源重新生成的资产不应进行版本控制。这是一个坏主意,原因正是你所经历的:

    • 您的历史记录跟踪您不关心的更改
    • 您必须努力忽略与提交历史无关的琐碎更改
    • 您会在可按需重新生成的数据上浪费存储库空间和处理时间
    • 请参阅,以获取有关版本和遗漏内容的相关讨论

      如果你还是这么做的话。。。 您可以在Git中创建一个自定义脚本(或者在更新YARD时运行的shell脚本或Rake任务),在提交文档文件之前删除时间戳。例如:

      # Tested with: GNU findutils 4.4.2, GNU sed 4.2.1
      find doc -type f -iname \*html -exec sed -i '/id="footer"/,/\/div/ d' {} +
      

      这将去掉YARD文档中的所有页脚,这样您就不会将这些行提交到历史记录中。这应该可以解决您的具体问题。

      文件中没有日期就足够了吗

      特定于码的解决方案(但不是特定于git的),如果您没有实际使用这些日期,那么首先让码不生成这些日期:

      customtemplates/default/layout/html/footer.erb
      中创建一个空文件,然后将其包含在模板中:

      • 使用命令行

        yardoc --template-path ./customtemplates
        
      • u
        YARD::Rake::YardocTask.new do |yardoc|
            yardoc.options = ["--template-path", "./customtemplates"]
        end
        
        <div id="footer">
             Generated by <a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>.
        </div>
        
        sed -r '/^#[[:space:]]+vim?:/ {N; /\n[^\n]/q1}'