Ruby-Git g.status siempre falla

He estado tratando de usar la gem rubygit para hacer commits, etc. en un script de ruby, sin embargo, el método para verificar el estado actual siempre arroja un error. Mi entendimiento es que este código, aunque no hace demasiado, debería ser válido.

#gem install git require 'rubygems' require 'git' g = Git.init g.status 

pero vuelve:

Git :: GitExecuteError: git diff-index "HEAD" 2> & 1: fatal: argumento ambiguo 'HEAD':> revisión desconocida o ruta no en el tree de trabajo.
Use '-' para separar las routes de las revisiones
de /Users/X/bin/ruby-ee-1.8.7/lib/ruby/gems/1.8/gems/git-1.2.5/lib/git/lib.rb:700:in command'
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'
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'
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
'
de /Users/X/bin/ruby-ee-1.8.7/lib/ruby/gems/1.8/gems/git-1.2.5/lib/git/lib.rb:287:in diff_index'
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
diff_index'
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
diff_index'
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 '
de /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'
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
initialize'
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
initialize'
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 '
de /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 '
desde (irb): 5

¿Alguien tiene ejemplos de cómo get el estado de git actual dentro de ruby ​​(usando ruby-git)?

Páginas que he visto:
http://rubygems.org/gems/git
http://git.rubyforge.org/

Gracias

La ruta puede ser la parte importante de ese post de error

revisión o ruta desconocida no en el tree de trabajo. Intenté correr:

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

en un directory que no tiene git repo, y explotó como lo hizo el tuyo.

Después de cd en el directory raíz de un proyecto con un git repo, funcionó.

Comtesting que estás en la raíz de un git repo. Debería haber un directory .git en él. Si no, también puede pasar el path a Git.init si el cd ing es inconveniente por alguna razón.

No puedo responder la pregunta de cómo get el estado si no se han realizado confirmaciones, pero puedo intentar explicar por qué está explotando.

La class Git :: Status funciona haciendo un git diff de HEAD contra el repository. En Git, "HEAD" se refiere a la twig actual y al tree de trabajo.

Como una twig es básicamente un puntero a una confirmación particular (el puntero de la twig se mueve a lo largo de la historia a medida que se realizan nuevas confirmaciones) no existen twigs realmente (ni siquiera maestras) hasta que haya una confirmación para apuntarla. Si no hay twigs, HEAD tampoco existe realmente. Por lo tanto, al referirse a él en un git diff arroja un error.

Esta es una gran guía visual para comprender HEAD / branches / commits: http://marklodato.github.com/visual-git-guide/

Por lo tanto, en conclusión, parece que tratar de hacer algo en un repository de git que no tiene compromisos es algo sin sentido. Por supuesto, para hacer una confirmación, necesitas un file. Entonces probablemente necesites:

 #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 

Si desea verificar si un file se ha agregado al repository:

 #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