我手头的任务是弄清楚最后一次提交的提交 ID 是什么,特定文件在哪里更改。我正在使用红宝石/坚固耐用。我想出的唯一解决方案是遍历所有提交,在树中搜索与该文件的提交相关联的文件,并将该文件 oid 与第一个(最新)提交的文件的 oid 进行比较:
def commit_oid commit, file
commit.tree.walk( :postorder ) { | root, obj |
return obj[ :oid ] if "#{root}#{obj[ :name ]}" == file
}
raise "\'#{file}\' not found in repository"
end
def find_last_commit file
johnny = Rugged::Walker.new( get_repository )
johnny.push get_repository.head.target
oid = commit_oid johnny.first, file
old_commit = johnny.first.oid
johnny.each do | commit |
new_oid = commit_oid commit, file
return old_commit if new_oid != oid
old_commit = commit.oid
end
old_commit
end
这可行,但似乎很复杂。必须有一种更简单的方法来获取信息,“提交改变了什么”。有没有更简单、更直接的方法来完成同样的事情?