Зернистость больше не сохраняется. Проверьте прочный.
Grit предоставляет вам объектно-ориентированный доступ для чтения/записи к репозиториям Git через Ruby. Главные цели — стабильность и производительность. С этой целью некоторые взаимодействия с репозиториями Git выполняются путем вызова системной команды git
, а другие взаимодействия выполняются с помощью чистой реализации Ruby основных функций Git. Однако этот выбор прозрачен для конечных пользователей, и вам не нужно знать, какой метод используется.
Это программное обеспечение было разработано для поддержки GitHub, и его следует считать готовым к производству. Для проверки правильности предоставляется обширный набор тестов.
Grit поддерживают Том Престон-Вернер, Скотт Чакон, Крис Ванстрат и Пи Джей Хайетт.
Эта документация соответствует версии Grit 2.3.
Самая простая установка — через RubyGems:
$ gem install grit
Репозиторий Git Grit доступен на GitHub, его можно просмотреть по адресу:
http://github.com/mojombo/grit
и клонирован с помощью:
git clone git://github.com/mojombo/grit.git
Вам понадобятся эти драгоценные камни, чтобы пройти тесты:
Если вы хотите взломать Grit, следуйте этим инструкциям. Чтобы получить все зависимости, сначала установите драгоценный камень.
rake
Grit предоставляет вам доступ к объектной модели к вашим репозиториям Git. После того как вы создали объект Repo
, вы можете просмотреть его, чтобы найти родительские коммиты, деревья, большие двоичные объекты и т. д.
Первым шагом является создание объекта Grit::Repo
представляющего ваше репо. В эту документацию я включил модуль Grit
, чтобы сократить набор текста.
require 'grit'
repo = Grit::Repo.new("/Users/tom/dev/grit")
В приведенном выше примере каталог /Users/tom/dev/grit
является моим рабочим каталогом и содержит каталог .git
. Вы также можете инициализировать Grit с помощью простого репозитория.
repo = Repo.new("/var/git/grit.git")
Из объекта Repo
вы можете получить список коммитов в виде массива объектов Commit
.
repo.commits
# => [#<Grit::Commit "e80bbd2ce67651aa18e57fb0b43618ad4baf7750">,
#<Grit::Commit "91169e1f5fa4de2eaea3f176461f5dc784796769">,
#<Grit::Commit "038af8c329ef7c1bae4568b98bd5c58510465493">,
#<Grit::Commit "40d3057d09a7a4d61059bca9dca5ae698de58cbe">,
#<Grit::Commit "4ea50f4754937bf19461af58ce3b3d24c77311d9">]
Вызванный без аргументов, Repo#commits
возвращает список до десяти коммитов, доступных для основной ветки (начиная с последнего коммита). Вы можете запросить коммиты, начинающиеся с другой ветки, коммита, тега и т. д.
repo.commits('mybranch')
repo.commits('40d3057d09a7a4d61059bca9dca5ae698de58cbe')
repo.commits('v0.1')
Вы можете указать максимальное количество возвращаемых коммитов.
repo.commits('master', 100)
Если вам нужна пейджинговая организация, вы можете указать количество коммитов, которые нужно пропустить.
repo.commits('master', 10, 20)
Вышеупомянутое вернет коммиты 21-30 из списка коммитов.
Объекты Commit
содержат информацию об этой фиксации.
head = repo.commits.first
head.id
# => "e80bbd2ce67651aa18e57fb0b43618ad4baf7750"
head.parents
# => [#<Grit::Commit "91169e1f5fa4de2eaea3f176461f5dc784796769">]
head.tree
# => #<Grit::Tree "3536eb9abac69c3e4db583ad38f3d30f8db4771f">
head.author
# => #<Grit::Actor "Tom Preston-Werner <[email protected]>">
head.authored_date
# => Wed Oct 24 22:02:31 -0700 2007
head.committer
# => #<Grit::Actor "Tom Preston-Werner <[email protected]>">
head.committed_date
# => Wed Oct 24 22:02:31 -0700 2007
head.message
# => "add Actor inspect"
Вы можете просмотреть происхождение коммита, связав вызовы #parents
.
repo.commits.first.parents[0].parents[0].parents[0]
Вышеуказанное соответствует мастеру^^^ или мастеру~3 на языке Git.
В дереве хранятся указатели на содержимое каталога. Допустим, вам нужно корневое дерево последнего коммита в основной ветке.
tree = repo.commits.first.tree
# => #<Grit::Tree "3536eb9abac69c3e4db583ad38f3d30f8db4771f">
tree.id
# => "3536eb9abac69c3e4db583ad38f3d30f8db4771f"
Когда у вас есть дерево, вы можете получить его содержимое.
contents = tree.contents
# => [#<Grit::Blob "4ebc8aea50e0a67e000ba29a30809d0a7b9b2666">,
#<Grit::Blob "81d2c27608b352814cbe979a6acd678d30219678">,
#<Grit::Tree "c3d07b0083f01a6e1ac969a0f32b8d06f20c62e5">,
#<Grit::Tree "4d00fe177a8407dbbc64a24dbfc564762c0922d8">]
Это дерево содержит два объекта Blob
и два объекта Tree
. Деревья — это подкаталоги, а капли — это файлы. Деревья ниже корня имеют дополнительные атрибуты.
contents.last.name
# => "lib"
contents.last.mode
# => "040000"
Существует удобный метод, позволяющий получить именованный подобъект из дерева.
tree / "lib"
# => #<Grit::Tree "e74893a3d8a25cbb1367cf241cc741bfd503c4b2">
Вы также можете получить дерево прямо из репозитория, если знаете его имя.
repo.tree
# => #<Grit::Tree "master">
repo.tree("91169e1f5fa4de2eaea3f176461f5dc784796769")
# => #<Grit::Tree "91169e1f5fa4de2eaea3f176461f5dc784796769">
Большой двоичный объект представляет файл. Деревья часто содержат капли.
blob = tree.contents.first
# => #<Grit::Blob "4ebc8aea50e0a67e000ba29a30809d0a7b9b2666">
Большой двоичный объект имеет определенные атрибуты.
blob.id
# => "4ebc8aea50e0a67e000ba29a30809d0a7b9b2666"
blob.name
# => "README.txt"
blob.mode
# => "100644"
blob.size
# => 7726
Вы можете получить данные большого двоичного объекта в виде строки.
blob.data
# => "Grit is a library to ..."
Вы также можете получить большой двоичный объект непосредственно из репозитория, если знаете его имя.
repo.blob("4ebc8aea50e0a67e000ba29a30809d0a7b9b2666")
# => #<Grit::Blob "4ebc8aea50e0a67e000ba29a30809d0a7b9b2666">
Существует множество других доступных методов API, которые здесь не описаны. Пожалуйста, обратитесь к коду для получения дополнительной функциональности.
Авторские права (c) 2010 Том Престон-Вернер. Подробности см. в разделе ЛИЦЕНЗИЯ.