Как совершить коммит с помощью привязок Ruby для libgit2

StackOverflow https://stackoverflow.com//questions/12649697

  •  11-12-2019
  •  | 
  •  

Вопрос

Кто-нибудь знает, как создать фиксацию, используя привязки 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.Какой код вы работаете?Это просто выглядит так, как будто не пропустите необходимое поле.Какие поля вы заполняете и как?

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top