Грит: Показать все файлы в мастере - PullRequest
0 голосов
/ 13 марта 2011

Я пытаюсь обернуть голову, используя Grit для записи в Git-репозиторий. Я могу легко создать репо и сделать коммит:

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])

Но как теперь получить содержимое этих двух файлов, не просматривая всю историю коммитов? Разве для меня нет более разумного способа получить текущее состояние файлов в репо?

1 Ответ

1 голос
/ 13 марта 2011
(repo.tree / 'myfile.txt').data

В частности, метод tree (который может принимать любой коммит, но по умолчанию мастер) возвращает Tree . Tree имеет удобный метод / , который возвращает Blob или Tree в зависимости от того, какое имя файла вы передаете. Наконец, Blob имеет метод data , который возвращает точные данные.

РЕДАКТИРОВАТЬ: Если вы хотите список всех имен файлов в репо (что может быть дорогостоящей операцией), один из способов:

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

Предполагается, что все отслеживается. Если вы не уверены, вы можете отфильтровать атрибут untracked.

...