Аналогично этому вопросу, но вместо создания нового файла я пытаюсь выполнить слияние из источника. После создания нового индекса с использованием Rugged::Repository
merge_commits
и новой фиксации слияния git сообщает, что новый файл (исходящий из origin
) удален.
Создайте индекс слияния,
> origin_target = repo.references['refs/remotes/origin/master'].target
> merge_index = repo.merge_commits(repo.head.target, origin_target)
и новый коммит слияния,
> options = {
update_ref: 'refs/heads/master',
committer: {name: 'user', email: '[email protected]', time: Time.now},
author: {name: 'user', email: '[email protected]', time: Time.now},
parents: [repo.head.target, origin_target],
message: "merge `origin/master` into `master`"}
и обязательно используйте дерево из индекса слияния.
> options[:tree] = merge_index.write_tree(repo)
Создайте фиксацию
> merge_commit = Rugged::Commit.create(repo, options)
Проверяем, что наш HEAD обновился:
> repo.head.target.tree
=> #<Rugged::Tree:16816500 {oid: 16c147f358a095bdca52a462376d7b5730e1978e}>
<"first_file.txt" 9d096847743f97ba44edf00a910f24bac13f36e2>
<"second_file.txt" 8178c76d627cade75005b40711b92f4177bc6cfc>
<"newfile.txt" e69de29bb2d1d6434b8b29ae775ad8c2e48c5391>
Выглядит неплохо. Я вижу новый файл в файле index. Запишите его на диск.
> repo.index.write
=> nil
... но git сообщает, что новый файл удален:
$ git st
## master...origin/master [ahead 2]
D newfile.txt
Как я могу правильно обновить свой индекс и рабочее дерево?
repo.reset repo.head.target, :hard
отменяет удаление и повторный вызов возвращает меня в чистый рабочий каталог. Таким образом, я могу подтвердить, чтоrepo.index.write
не записывает рабочий каталог, несмотря на то, что указано в документы. Итак, как мне обновить рабочий каталог? - person occamsquattro   schedule 16.01.2015