2010-06-18 3 views
0

루비 스크립트에서 커밋 등을 만들기 위해 루비 - 망할 보석을 사용하려고했지만 현재 상태를 검사하는 메서드는 항상 오류를 던집니다. 내 이해는이 코드는 너무 많이하지는 않지만 유효해야한다는 것입니다.Ruby-Git g.status 항상 실패합니다

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

g = Git.init 
g.status 

있지만 반환

Git::GitExecuteError: git diff-index "HEAD" 2>&1:fatal: ambiguous argument 'HEAD': >unknown revision or path not in the working tree.
Use '--' to separate paths from revisions
from /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_lines'
from /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
construct_status'
from /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
new'
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 `status'
from (irb):5

하나는 루비 내의 현재 자식의 상태를 확인하는 방법의 예를 가지고 있는가 (루비 - 자식을 사용)?

답변

1

경로가 디렉토리에서 해당 오류 메시지

unknown revision or path not in the working tree. I tried running:

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

의 중요한 비트 수 있습니다
http://rubygems.org/gems/git
http://git.rubyforge.org/

감사 :

페이지를 내가 받게 요 일 at에는 자식이 없습니다. 그리고 당신 목숨처럼 날 았죠.

루트 디렉토리에 git repo가있는 프로젝트의 cd이 들어가면 작동했습니다.

git repo의 루트에 있는지 확인하십시오. 그 안에 .git 디렉토리가 있어야합니다. 그렇지 않은 경우 어떤 이유에서든 cd ing이 불편한 경우 Git.init 경로를 전달할 수 있습니다.

+0

Git.init 현재 디렉토리 힘내의 repo해야한다 :

#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 

당신이 파일의 repo에 추가되었는지 확인하려면

. 왜 당신이 실패했는지 확실하지 않습니다. 하지만 .git /가 들어있는 폴더에서 실행 중입니다. – Morgan

+0

아, 기존의 .git/repo를 시도해 보았습니다. Git.init이 내가 생각하는 모든 것을 수행하지 않고 있어야합니다. 감사합니다. – Morgan

+0

커밋이없는 경우 상태가 심각하게 실패합니다. – Morgan

2

커밋을하지 않은 경우 상태를 얻는 방법에 대한 질문에 답할 수는 없지만 왜 부 풀릴지를 설명 할 수 있습니다.

Git :: Status 클래스는 저장소에 대해 HEAD의 git diff를 수행하여 작동합니다. 힘내에서 "머리"는 현재 지점 & 작업 트리를 말합니다.

기본적으로 분기는 특정 커밋에 대한 포인터이므로 (분기 포인터는 새로운 커밋이 만들어지면서 기록을 따라 이동 함) 지점을 지정할 커밋이있을 때까지 실제로 분기가 존재하지 않습니다 (심지어 마스터가 아님). 가지가 없으면 HEAD는 실제로 존재하지 않습니다. 따라서 git diff에서 오류를 참조하면 오류가 발생합니다.

이것은 HEAD/지점을 이해하는 좋은 비주얼 가이드/커밋 :

그래서 결론적으로 더 커밋이없는 자식의 repo에서 어떤 일을하려고하는 것은 다소 무의미한 것 같다 http://marklodato.github.com/visual-git-guide/. 물론 커밋을하려면 파일이 필요합니다. 그래서 당신은 아마 필요로 :

#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 
+0

감사합니다. 나는 그것을 이해한다, 나는 그것을 좋아하지 않는다. 나는 정보를 출력하고있는 것처럼 명령 행 자식에 대해 좀 더 정상적으로 처리해야한다고 생각하지만 루비 명령이 실패하는 것은 짜증 스럽다. 파일을 추가했는지 확인하기 위해 상태를 보려고했는데, 추가하지 않으면 파일을 추가 할 수 없습니다. 1 개의 파일 만 제어하는 ​​스크립트 버전입니다. – Morgan

+0

ls_files는 오래된 밤입니다. 고마워 스캇 차콘 예를 들어 내가 언급을 유지했다. – Morgan

관련 문제