1

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

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

信息 color.diff:总是

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

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

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

4

2 回答 2

2

以下是我使用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
于 2015-08-06T20:15:45.827 回答
1

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

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

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

于 2015-08-01T18:24:37.103 回答