2010-06-11 66 views
0

我在嘗試查找兩個不同提交之間更改的文件時遇到問題。這裏是設置,紅寶石和寶石砂的版本,當我運行該程序時會發生什麼:如何找出使用Grit在提交之間更改哪些文件

> cd /temp 
> mkdir tt 
> cd tt 
> git init 
Initialized empty Git repository in C:/temp/tt/.git/ 
> ruby --version 
ruby 1.8.7 (2010-01-10 patchlevel 249) [i386-mingw32] 
> gem list grit 
*** LOCAL GEMS *** 
grit (2.0.0) 
> ruby ..\git_diff_test.rb 
Commit #1 succeeded. 
Commit #2 succeeded. 
c:/apps/ruby/lib/ruby/gems/1.8/gems/grit-2.0.0/lib/grit/repo.rb:290:in `diff': wrong number of arguments (4 for 3) (ArgumentError) 
     from c:/apps/ruby/lib/ruby/gems/1.8/gems/grit-2.0.0/lib/grit/repo.rb:290:in `diff' 
     from ../git_diff_test.rb:13 

這裏是Ruby程序:

require 'rubygems' 
require 'grit' 
include Grit 
File.open('t1.txt', 'w') { |f| f.write('hi/bye') } 
repo = Repo.new('.') 
repo.add('.') 
puts "Commit #1 #{repo.commit_all('1') ? 'succeeded' : 'failed'}." 
File.open('t1.txt', 'w') { |f| f.write('hi/bye twice') } 
File.open('t2.txt', 'w') { |f| f.write('hi/bye 2') } 
repo.add('.') 
puts "Commit #2 #{repo.commit_all('2') ? 'succeeded' : 'failed'}." 
commits = repo.commits 
the_diff = repo.diff(commits[0], commits[1]) # line 13 with the error 
p the_diff 
+0

使用命令行工具,這將是'git diff --numstat commit1..commit2',但我不知道如何emula那在沙礫裏。 – Novelocrat 2010-06-11 19:23:49

+0

感謝您的指針。失敗的調用失敗時調用一個執行出來並調用命令行git diff的較低級別的調用。調用這個較低級別的函數確實會產生一個差異,問題在於設置cmd行選項被破壞。還有一個問題,除非ruby程序當前的工作目錄位於工作樹中,否則它可以找到.git目錄,因此exec調用失敗 - .add命令也會遇到此問題。因爲這是一個線程應用程序,改變它的pwd將不起作用 - 所以我必須編寫執行工作的shell腳本,而不是使用Grit庫。 – 2010-06-13 13:21:34

回答

0

可以使用

grit.commits_between('HASH1', 'HASH2') 

得到兩個提交列表

相關問題