Как совершить коммит с помощью привязок Ruby для libgit2
Вопрос
Кто-нибудь знает, как создать фиксацию, используя привязки Ruby («надежный» драгоценный камень) для libgit2?Я перепробовал все примеры, которые смог найти, в руководстве по использованию libgit2 и на странице GemHub Rugged Gems, и ни один из примеров создания или редактирования коммита не работает.
Это было полезно при попытке выяснить, как совершить коммит, за исключением того, что это касается самой библиотеки libgit2, а не привязок Ruby. http://librelist.com/browser//libgit2/2011/2/19/initing-a-repository-adding-files-to-the-index-and-committing/#d94ce8df18ff0202ce904180286a4a85
Когда я пытаюсь сделать коммит, следуя инструкциям на странице Rugged Github, я получаю следующее:
pry(main)> Rugged::Commit.create( repo, :author=>author, :message=>"Hello world\n\n", :committer=>author, :parents=>parents, :tree=>tree )
TypeError: wrong argument type nil (expected String)
И когда я пытаюсь следовать руководству по использованию libgit2, в котором по сути говорится, что нужно получить коммит, а затем просто отредактировать его, используя commit.message=
как команды, но затем я получаю noMethodErrors, потому что нет метода message=.
руководство по использованию libgit2: http://libgit2.github.com/api.html
Надежная документация 0: http://rubydoc.info/gems/rugged/0.16.0/frames
Прочная страница на Github: https://github.com/libgit2/rugged
Редактировать:Как я это воспроизвожу; http://pastebin.com/wnta8FWm
Редактировать_n+1:Я также попробовал использовать ша дерева вместо объекта Rugged::Tree, попытавшись
x=Rugged::Commit.create( repo, :author=>author, :message=>"Hello world\n\n", :committer=>author, :parents=>parents, :tree=>tree.oid )
Но это привело к тому же выводу ошибки, что и раньше.
Решение 2
TL;DR --- Вот что мне помогло: gem install --prerelease rugged
После некоторых раскопок и большого количества экспериментов, я думаю, что понял проблему.
Когда я сделал gem install rugged
он дал мне версию 0.16.0.Это была та версия, с которой у меня возникли проблемы, и когда я попробовал тесты, поставляемые с драгоценным камнем, многие из них провалились, и многие из них, похоже, были связаны с коммитами и написанием коммитов.
Страница Rubygems для драгоценного камня Rugged показывает, что доступна версия 0.17.0.b6, что меня смутило, поскольку я никогда не сталкивался с опцией --prerelease для gem
.Эта версия должна быть предварительной версией, потому что после выполнения gem install --prerelease rugged
была установлена (также) версия 0.17.0.b6.
Теперь с версией 0.17.0.b6 я могу без проблем следовать документации.
Еще одно примечание: в документации, которую я прочитал, об этом не упоминается, кроме исходного кода в ext/rugged_commit.c
есть комментарии, в которых упоминается :update_ref=>''
опция при создании фиксации, которую вы можете использовать для обновления ссылки, чтобы она указывала на новую фиксацию.Без этой опции фиксация будет создана и записана в ODB, но никакие ссылки не будут обновлены, и поэтому фиксация не будет доступна ни из одной из ваших веток.
Другие советы
Rugged::Commit.create(repo, data)
не то, что в readme.Какой код вы работаете?Это просто выглядит так, как будто не пропустите необходимое поле.Какие поля вы заполняете и как?