2011-03-13 60 views
0

我正在嘗試用Grit寫入Git存儲庫。我可以輕鬆地創建一個回購協議,並作出承諾:Grit:顯示主文件夾中的所有文件

repo = Repo.init_bare("grit.git") 
index = Index.new(repo) 
index.add('myfile.txt', 'This is the content') 
index.commit('first commit') 

我也可以很容易地進行第二次提交,使用第一次提交的父:

index.add('myotherfile.txt', 'This is some other content') 
index.commit("second commit", [repo.commits.first]) 

但是現在我如何獲得的內容這2個文件沒有遍歷整個提交歷史?是否有更聰明的方式讓我在回購中獲取文件的當前狀態?

回答

1
(repo.tree/'myfile.txt').data 

具體而言,tree方法(其可以採取任何提交,但默認爲主)返回一個Tree。樹有一個方便的/方法,它返回一個Blob或樹,取決於你傳入的文件名。最後,Blob有一個返回確切數據的data方法。

編輯:如果你想在回購所有的文件名(這可能是一個昂貴的操作)的列表,一種方式是:

all_files = repo.status.map { |stat_file| stat_file.path } 

這是假設一切都被跟蹤。如果您不確定,可以過濾untracked屬性。

+0

但是如果我不知道我的文件名是什麼?如果它是1000個文件的回購?有沒有辦法做一些像repo.tree.all? – Ronze 2011-03-13 04:38:12

+0

謝謝!我想我的問題是,在第二次提交之前,我沒有在索引上調用read_tree(它在另一個控制器中) – Ronze 2011-03-13 05:03:02

相關問題