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
.