Grit: muestra todos los files en el maestro

Estoy tratando de entender a Grit para escribir en un repository de Git. Puedo crear fácilmente un repository y hacer una confirmación:

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

También puedo hacer fácilmente el segundo commit, usando el primer commit como parent:

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

Pero ahora, ¿cómo obtengo el contenido de esos 2 files sin atravesar todo el historial de commits? ¿No hay una forma más inteligente de get el estado actual de los files en un repository?

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

Específicamente, el método de tree (que puede tomar cualquier confirmación, pero por defecto es maestro) devuelve un tree . Tree tiene un método / conveniente que devuelve un Blob o Tree dependiendo de qué nombre de file se pase. Finalmente, Blob tiene un método de datos que devuelve los datos exactos.

EDITAR: Si desea una list de todos los nombres de file en el repository (que puede ser una operación costosa), una forma es:

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

Esto supone que todo se rastrea. Si no está seguro, puede filtrar el atributo sin untracked .