Я пытаюсь создать коммлю с неровным, используя следующий тестовый сценарий:Как обновить рабочий каталог при создании фиксации с помощью Rugged/libgit2?
require "rugged"
r = Rugged::Repository.new(".")
index = r.index
index.read_tree(r.references["refs/heads/master"].target.tree)
blob = r.write("My test", :blob)
index.add(:oid => blob, :path => "test.md", :mode => 0100644)
tree = index.write_tree
parents = [r.references["refs/heads/master"].target].compact
actor = {:name => "Actor", :email => "[email protected]"}
options = {
:tree => tree,
:parents => parents,
:committer => actor,
:message => "message",
:update_ref => "HEAD"
}
puts Rugged::Commit.create(r, options)
фиксация будет создан, и сценарий выводит 773d97f453a6df6e8bb5099dc0b3fc8aba5ebaa7
(УВЙ из нового коммита). Сформированные фиксации и дерева выглядят, как они должны:
ludwig$ git cat-file commit 773d97f453a6df6e8bb5099dc0b3fc8aba5ebaa7
tree 253d0a2b8419e1eb89fd462ef6e0b478c4388ca3
parent bb1593b0534c8a5b506c5c7f2952e245f1fe75f1
author Actor <[email protected]> 1417735899 +0100
committer Actor <[email protected]> 1417735899 +0100
message
ludwig$ git ls-tree 253d0a2b8419e1eb89fd462ef6e0b478c4388ca3
100644 blob a7f8d9e5dcf3a68fdd2bfb727cde12029875260b Initial file
100644 blob 7a76116e416ef56a6335b1cde531f34c9947f6b2 test.md
Однако рабочий каталог не обновляется:
ludwig$ ls
Initial file rugged_test.rb
ludwig$ git status
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
deleted: test.md
Я должен сделать git reset --hard HEAD
, чтобы получить недостающий файл test.md
показать в рабочем каталоге. Я думал, что создание Rugged commit и установка :update_ref => "HEAD"
должны были автоматически обновлять рабочий каталог, но что-то должно идти не так, потому что делать r.checkout_head
также не имеет никакого эффекта. Однако, я думаю, что я правильно следую the rugged examples. Что мне здесь не хватает?
EDIT:
ludwig$ gem list rugged
*** LOCAL GEMS ***
rugged (0.21.2)
Ах, я ожидал, что он будет постоянно обновлять рабочий каталог, потому что JGit делает это, а также при добавлении индекса через API-интерфейс сантехники. Благодарим вас за разъяснение, что прочный не должен работать так. Я был смущен, потому что 'r.checkout_head' не работал, но похоже, что это было потому, что я забыл правильно установить вариант стратегии:. – dometto