如何使用 Rugged 查找提交中更改的文件?
How do I find the files changed in a commit using Rugged?
我计划使用 Rugged 以编程方式访问 Git 个存储库。
我需要找出在特定提交中更改的文件。
根据文档,提交 object 提供以下内容。
- 留言
- 时间
- 作者
- 树
- parents
我尝试了 "tree" 路线,但未能成功。
我在 SO 中看到了一个与 Grit 有关的类似问题。但是,我想使用 Rugged。
In ruby/grit, how do I get a list of files changed in a specific commit?
您可以使用 Rugged::Commit#diff
获取提交与其第一个父项或另一个 Rugged::Commit
或 Rugged::Tree
.
之间的更改
以下是基于 Arthur 回答的片段。
require 'rugged'
paths = [];
repo = Rugged::Repository.new('/Users/geordee/Code/HasMenu/data')
walker = Rugged::Walker.new(repo)
walker.sorting(Rugged::SORT_TOPO | Rugged::SORT_REVERSE)
walker.push(repo.head.target)
walker.each do |commit|
# skip merges
next if commit.parents.count != 1
diffs = commit.parents[0].diff(commit)
diffs.each_delta do |delta|
paths += [delta.old_file[:path], delta.new_file[:path]]
end
end
puts paths
这可能会跳过第一次提交。
一种基于 HEAD 获取特定提交中所有文件的更简单方法。
require "rugged"
repo = Rugged::Repository.new('.')
commit = repo.head.target
paths = commit.diff(commit.parents.first).deltas.map { |d| [d.old_file[:path], d.new_file[:path]] }.flatten.uniq
我计划使用 Rugged 以编程方式访问 Git 个存储库。
我需要找出在特定提交中更改的文件。
根据文档,提交 object 提供以下内容。
- 留言
- 时间
- 作者
- 树
- parents
我尝试了 "tree" 路线,但未能成功。
我在 SO 中看到了一个与 Grit 有关的类似问题。但是,我想使用 Rugged。
In ruby/grit, how do I get a list of files changed in a specific commit?
您可以使用 Rugged::Commit#diff
获取提交与其第一个父项或另一个 Rugged::Commit
或 Rugged::Tree
.
以下是基于 Arthur 回答的片段。
require 'rugged'
paths = [];
repo = Rugged::Repository.new('/Users/geordee/Code/HasMenu/data')
walker = Rugged::Walker.new(repo)
walker.sorting(Rugged::SORT_TOPO | Rugged::SORT_REVERSE)
walker.push(repo.head.target)
walker.each do |commit|
# skip merges
next if commit.parents.count != 1
diffs = commit.parents[0].diff(commit)
diffs.each_delta do |delta|
paths += [delta.old_file[:path], delta.new_file[:path]]
end
end
puts paths
这可能会跳过第一次提交。
一种基于 HEAD 获取特定提交中所有文件的更简单方法。
require "rugged"
repo = Rugged::Repository.new('.')
commit = repo.head.target
paths = commit.diff(commit.parents.first).deltas.map { |d| [d.old_file[:path], d.new_file[:path]] }.flatten.uniq