2011-03-13 62 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

相关问题