如何使用Ruby解析特定文件的git diff?
我有一个用Ruby脚本编辑的Android XML(字符串)文件。我想列出并输出当时所做的更改。我已经用Nokogiri和如何使用Ruby解析特定文件的git diff?,ruby,git,Ruby,Git,我有一个用Ruby脚本编辑的Android XML(字符串)文件。我想列出并输出当时所做的更改。我已经用Nokogiri和Nokogiri/diff试过了。但它没有达到预期的效果 我也觉得当它中间有一条新的线时,它就有问题了。总之,我想如果我能使用git diff,这将是最简单的 我也找到了gem,但我仍然无法让它工作。特别是因为我只需要一个特定文件的diff require 'git' Git.configure do |config| #not sure if I actually ne
Nokogiri/diff
试过了。但它没有达到预期的效果
我也觉得当它中间有一条新的线时,它就有问题了。总之,我想如果我能使用git diff
,这将是最简单的
我也找到了gem,但我仍然无法让它工作。特别是因为我只需要一个特定文件的diff
require 'git'
Git.configure do |config|
#not sure if I actually need something?
end
g = Git.open(path_to_my_dir, :log => Logger.new(STDOUT))
g.diff(path_to_file)
#or
g.diff().path(path_to_file)
谁能帮帮我吗-(你的想法是正确的 为此,请使用
require 'git'
g = Git.open('path/to/dir')
g.diff('your.file').patch #=> changes in your.file
例如,我们的git repo中有空文件git.rb
和smth
然后我们更改它们并检查差异:
$ git diff
diff --git a/git.rb b/git.rb
index e69de29..3ff224d 100644
--- a/git.rb
+++ b/git.rb
@@ -0,0 +1,3 @@
+require 'git'
+g = Git.open(__dir__)
+puts g.diff('smth').patch
diff --git a/smth b/smth
index e69de29..7c5bd35 100644
--- a/smth
+++ b/smth
@@ -0,0 +1 @@
+we want to know changes
正如已经从修改后的git.rb
猜到的,现在我们将只在smth
中看到更改:
$ ruby git.rb
diff --git a/smth b/smth
index e69de29..7c5bd35 100644
--- a/smth
+++ b/smth
@@ -0,0 +1 @@
+we want to know changes
如果没有更改,您将得到空字符串
”
您可能希望直接使用McIlroy Hunt最长公共子序列(LCS)算法,而不是使用它的派生/包装
看
如果您比较a与b的变化,而不是b与a的变化,则差异会发生变化,但您当然可以对数组或整个文件运行它
如果您愿意,gem还有经典的diff工具格式(diff或git使用),而不是直接输出。嘿,我尝试了这个,因为它看起来非常简单。例如,我尝试了
g=git.open(“User/me/android项目”)
然后g.diff(“fobber/src/main/res/values/strings.xml”).patch
但随后我收到一个错误,如:路径参数不明确:未知提交或路径在工作目录中不存在:-(我做错了什么?例如,您使用此scipt的文件位于/home/user/smth
文件夹中。它将在/home/user/smth/user/me/android project
中搜索git repo文件夹。这是因为您有错误谢谢您的帮助。它现在正在工作。问题是在我的脚本中,指向.git文件夹的路径是绝对路径。)不知怎的,我的文件路径刚刚开始在文件夹中的某个地方。我现在使用的是一个绝对路径,它正在工作。很好!