Я пытаюсь использовать Rugged::Index #add для добавления нового файла в индекс. Похоже, он успешно добавлен в индекс, но связанный с ним статус Rugged::Repository # для данного файла очищен.
Пример сеанса IRB, показывающий мою попытку добавить файл "TEST_JJV_IRB1"
>> path = "TEST_JJV_IRB1"
=> "TEST_JJV_IRB1"
>> FileUtils.touch("#{local_repo}/#{path}")
=> ["/var/tmp/d20141015-95025-c5bbxe/TEST_JJV_IRB1"]
>> repo.inspect
=> "#<Rugged::Repository:70155837868280 {path: \"/private/var/tmp/d20141015-95025-c5bbxe/.git/\"}>"
Rugged::Repository #status правильно сообщает о вновь созданном файле "TEST_JJV_IRB1".
>> repo.status(path)
=> [:worktree_new]
и правильно не включены в Rugged::Index
>> index = repo.index
=> #<Rugged::Index
[0] 'a_file'
[0] 'b_file'
[0] 'c_file'
Здесь я пытаюсь добавить новый файл в файл index.
>> oid = Rugged::Blob.from_workdir repo, path
=> "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391"
>> index.add(:path => path, :oid => oid, :mode => 0100644)
=> nil
>> index.write
=> nil
Добавляемый файл "TEST_JJV_IRB1" теперь правильно включен в индекс.
>> repo.index
=> #<Rugged::Index
[0] 'a_file'
[0] 'b_file'
[0] 'c_file'
[0] 'TEST_JJV_IRB1'
Но Rugged::Repository #status сообщает о его статусе как очищенном.
>> repo.status(path)
=> []
Я ожидаю, что Rugged::Repository #status сообщит [:index_new]
Как ни странно, выдача git status
из командной строки показывает новый файл «TEST_JJV_IRB1» как «Изменения, которые необходимо зафиксировать:»
% git status
On branch master
Your branch is up-to-date with 'origin/master'.
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
new file: TEST_JJV_IRB1