【问题标题】:colorized diffs with Rugged?Rugged 的​​彩色差异?
【发布时间】:2015-07-30 21:47:38
【问题描述】:

我正在尝试为补丁的输出着色。设置 color.diff 配置(通过我的 .gitconfig)似乎没有这样做。

repo = Rugged::Repository.new('/some/path')
repo.config = Rugged::Config.new("#{ENV['HOME']}/.gitconfig")
log.info repo.config['color.diff']

INFO color.diff:总是

我正在执行以下操作以显示未分级的更改:

repo.index.diff.each do |patch|
  puts patch
end

我可以获得更漂亮的彩色差异吗?

【问题讨论】:

    标签: git libgit2 rugged


    【解决方案1】:

    这是我使用 colorize gem 的方法:

    def diff 
      diff = @repo.index
        .diff
        .each_patch
        .to_a
    
      diff.each do |patch|
        patch.to_s.split("\n").each do |line|
          puts colorize_diff(line)
        end
      end
    end
    
    def colorize_diff(line)
      color =
        case line[0, 1]
        when "+"
          :green
        when "-"
          :red
        when "@"
          :cyan
        end
      color ? line.send(color) : line
    end
    

    【讨论】:

      【解决方案2】:

      color.diff 是 git 面向用户的工具在终端上放置颜色的一个选项。没有任何对等物/libgit2,因为它们不处理用户界面或打印到终端,而是生成数据。

      如何在终端(或其他设备)上生成颜色本身就是一个复杂的问题,它需要自己的库和解决常见问题的方法,它完全超出了 Rough/libgit2 的范围。

      我建议在 https://rubygems.org 中寻找一个知道如何处理您感兴趣的终端的 gem。

      【讨论】:

        猜你喜欢
        • 2011-01-02
        • 1970-01-01
        • 2012-09-16
        • 2017-07-15
        • 2011-11-30
        • 1970-01-01
        • 2021-08-23
        • 2018-01-11
        • 1970-01-01
        相关资源
        最近更新 更多