Итерация с Ruby через git коммиты для конкретной ветки

Я хотел бы использовать Rugged для перебора всех коммитов в определенной ветке, от самого старого (первого) до самого нового (последнего). Я хотел бы изучить SHA1 и комментарий к каждому из них.

Может быть, мне лучше просто запустить «git log --reverse» и проанализировать результаты, но пока есть эта хорошая библиотека Ruby для работы с Git, я полагаю, что буду ее использовать.

Простите меня, но я не могу понять, как делать то, что я хочу, из документов Rugged или libgit2.


person Ladlestein    schedule 17.01.2015    source источник


Ответы (1)


Вы можете создать ходок фиксации, что-то вроде этого:

require 'rugged'

repo = Rugged::Repository.new('/path/for/your/repo')
walker = Rugged::Walker.new(repo)
walker.sorting(Rugged::SORT_REVERSE)
walker.push(repo.branches["master"].target_id)

walker.each do |commit| 
  puts "commit #{commit.oid}"
  puts "Author: #{commit.author[:name]} <#{commit.author[:email]}>"
  puts "Date:   #{commit.author[:time]}"
  puts "\n    #{commit.message}\n"
end
walker.reset

Вы можете проверить документацию и прочитать тестирует код в репозитории, чтобы узнать, что вы можете сделать с Rugged.

person hector    schedule 05.04.2015
comment
Спасибо @hector. В конце концов я понял это, сделав почти то же самое, что вы написали, но я использовал SORT_DATE и полностью изменил все это. Может быть, ваш немного лучше. - person Ladlestein; 15.04.2015