Для данного файла в git-репо я хотел бы посмотреть SHA последнего коммита, в котором был изменен файл, вместе с меткой времени.Доступ к данным журнала git с использованием рубинового прочного драгоценного камня?
В командной строке эти данные отображаются в журнале git для определенного пути к файлу, например.
git log -n 1 path/to/file
Используя «GIT» драгоценный камень рубин Я также могу это сделать:
require 'git'
g = Git.open("/path/to/repo")
modified = g.log(1).object(relative/path/to/file).first.date
sha = g.log(1).object(relative/path/to/file).first.sha
, который является большим, но работает слишком медленно для меня, когда зацикливания через множество путей. Поскольку Rugged использует библиотеки C вместо этого, я надеялся, что это будет быстрее, но не может понять, как построить правильный запрос в прочном синтаксисе. Какие-либо предложения?
Спасибо! Хм, не уверен, что я пропустил, но, похоже, не работает для меня - 'commit' выходит как' nil'. Также мне кажется странным, что синтаксис требует этого цикла, потому что ни один из методов в моем вопросе не требует (явного) цикла, но вместо этого запрашивает журнал ... – cboettig
Я просто обновил свой ответ с помощью крошечных исправлений (теперь он использует правильная сортировка и игнорирование слияния). –
Я также добавил несколько примеров. Убедитесь, что путь, который вы передаете 'Rugged :: Commit # diff', действительно существует в вашем репо, что может объяснить ваше значение nil' commit. Кроме того, вы можете передать 'disable_pathspec_match: true', если вы передаете только фиксированные пути, а не pathspecs в метод' # diff'. –