Ruby-Git g.status всегда терпит неудачу - PullRequest
0 голосов
/ 19 июня 2010

Я пытался использовать гем ruby-git для выполнения коммитов и т. Д. В сценарии ruby, однако метод проверки текущего состояния всегда выдает ошибку.Насколько я понимаю, этот код, хотя и не слишком много, должен быть действительным.

#gem install git
require 'rubygems'
require 'git'

g = Git.init
g.status

но возвращается:

Git :: GitExecuteError: git diff-index "HEAD" 2> & 1: fatal: неоднозначный аргумент 'HEAD':> неизвестная ревизия илипуть не в рабочем дереве.
Используйте '-', чтобы отделить пути от ревизий
от /Users/X/bin/ruby-ee-1.8.7/lib/ruby/gems/1.8/gems/git-1.2.5 / lib / git / lib.rb: 700: в command'<br> from /Users/X/bin/ruby-ee-1.8.7/lib/ruby/gems/1.8/gems/git-1.2.5/lib/git/lib.rb:672:in command_lines '
из /Users/X/bin/ruby-ee-1.8.7/lib/ruby/gems/1.8/gems/git-1.2.5 / lib / git / lib.rb: 287: в diff_index'<br> from /Users/X/bin/ruby-ee-1.8.7/lib/ruby/gems/1.8/gems/git-1.2.5/lib/git/status.rb:99:in construct_status '
из /Users/X/bin/ruby-ee-1.8.7/lib/ruby/gems/1.8/gems/git-1.2.5/lib/git/status.rb:8:in initialize'<br> from /Users/X/bin/ruby-ee-1.8.7/lib/ruby/gems/1.8/gems/git-1.2.5/lib/git/base.rb:175:in new '
от /Users/X/bin/ruby-ee-1.8.7/lib/ruby/gems/1.8/gems / git-1.2.5 / lib / git / base.rb: 175: in `status '
from (irb): 5

Есть ли у кого-нибудь примеры того, как получитьтекущий статус git в ruby ​​(используя ruby-git)?

Страницы, на которые я смотрел:
http://rubygems.org/gems/git
http://git.rubyforge.org/

Спасибо

Ответы [ 2 ]

2 голосов
/ 19 июня 2010

Я не могу ответить на вопрос, как получить статус, если не было сделано никаких коммитов, но я могу попытаться объяснить, почему он взорвался.

Класс Git :: Status работает, выполняяgit diff из HEAD против хранилища.В Git «HEAD» ссылается на текущую ветку и рабочее дерево.

Поскольку ветвь в основном является указателем на конкретный коммит (указатель ветки перемещается по истории, когда производятся новые коммиты), в действительности веток не существует(даже не мастер), пока не появится коммит, на который можно указать.Если веток нет, HEAD тоже не существует.Поэтому ссылка на него в git diff выдает ошибку.

Это отличное визуальное руководство по пониманию HEAD / branch / commitits: http://marklodato.github.com/visual-git-guide/

Итак, в заключение, кажется, что попыткаделать что-либо в git-репо без коммитов бессмысленно.Конечно, чтобы сделать коммит, вам нужен файл.Поэтому вам, вероятно, необходимо:

#gem install git
require 'rubygems'
require 'git'

#Create an empty file
FileUtils.touch 'README'

g = Git.init
g.add('README')
g.commit('First Commit')
g.status

Если вы хотите проверить, был ли файл добавлен в репо:

#gem install git
require 'rubygems'
require 'git'

#Create an empty file
FileUtils.touch 'README'

g = Git.init
g.ls_files.has_key?("README") #False

g.add("README")
g.commit("First Commit")

g.ls_files.has_key?("README") #True
1 голос
/ 19 июня 2010

Путь может быть важным битом этого сообщения об ошибке

неизвестная ревизия или путь отсутствует в рабочем дереве. Я попытался запустить:

$ irb
> require 'rubygems'
> require 'git'
> g = Git.init
> g.status

в каталоге, в котором нет git-репо, и он взорвался, как ваш.

После cd входа в директорию root проекта с git-репо все заработало.

Проверьте, что вы находитесь в корне git-репо. Там должен быть каталог .git. Если нет, вы также можете указать путь к Git.init, если cd по какой-либо причине неудобен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...