그릿은 더 이상 유지되지 않습니다. 견고함을 확인해보세요.
Grit는 Ruby를 통해 Git 저장소에 대한 객체 지향 읽기/쓰기 액세스를 제공합니다. 주요 목표는 안정성과 성능입니다. 이를 위해 Git 리포지토리와의 상호 작용 중 일부는 시스템의 git
명령을 실행하여 수행되고, 다른 상호 작용은 핵심 Git 기능을 순수 Ruby로 다시 구현하여 수행됩니다. 그러나 이 선택은 최종 사용자에게 투명하며 어떤 방법이 사용되는지 알 필요가 없습니다.
이 소프트웨어는 GitHub를 지원하기 위해 개발되었으며 프로덕션 준비가 완료된 것으로 간주되어야 합니다. 정확성을 검증하기 위해 광범위한 테스트 스위트가 제공됩니다.
Grit는 Tom Preston-Werner, Scott Chacon, Chris Wanstrath 및 PJ Hyett가 관리합니다.
이 문서는 Grit 2.3 기준으로 정확합니다.
가장 쉬운 설치는 RubyGems를 이용하는 것입니다.
$ gem install grit
Grit의 Git 저장소는 GitHub에서 사용할 수 있으며 다음 위치에서 찾아볼 수 있습니다.
http://github.com/mojombo/grit
다음을 사용하여 복제되었습니다.
git clone git://github.com/mojombo/grit.git
테스트를 통과하려면 다음 보석이 필요합니다.
Grit를 해킹하고 싶다면 다음 지침을 따르세요. 모든 종속성을 얻으려면 먼저 gem을 설치하십시오.
rake
실행하여 모든 것이 여전히 통과하는지 확인하세요. Grit는 Git 리포지토리에 대한 개체 모델 액세스를 제공합니다. Repo
객체를 생성한 후에는 이를 탐색하여 상위 커밋, 트리, Blob 등을 찾을 수 있습니다.
첫 번째 단계는 저장소를 나타내는 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
마스터 브랜치가 도달할 수 있는 최대 10개의 커밋 목록을 반환합니다(최신 커밋부터 시작). 다른 브랜치, 커밋, 태그 등에서 시작하는 커밋을 요청할 수 있습니다.
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]
위 내용은 Git 용어로 master^^^ 또는 master~3 에 해당합니다.
트리는 디렉토리의 내용에 대한 포인터를 기록합니다. 마스터 브랜치의 최신 커밋의 루트 트리가 필요하다고 가정해 보겠습니다.
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
개체가 포함되어 있습니다. 트리는 하위 디렉터리이고 Blob은 파일입니다. 루트 아래의 트리에는 추가 속성이 있습니다.
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은 파일을 나타냅니다. 나무에는 종종 얼룩이 포함되어 있습니다.
blob = tree.contents.first
# => #<Grit::Blob "4ebc8aea50e0a67e000ba29a30809d0a7b9b2666">
Blob에는 특정 속성이 있습니다.
blob.id
# => "4ebc8aea50e0a67e000ba29a30809d0a7b9b2666"
blob.name
# => "README.txt"
blob.mode
# => "100644"
blob.size
# => 7726
Blob의 데이터를 문자열로 가져올 수 있습니다.
blob.data
# => "Grit is a library to ..."
이름을 알고 있는 경우 저장소에서 직접 Blob을 가져올 수도 있습니다.
repo.blob("4ebc8aea50e0a67e000ba29a30809d0a7b9b2666")
# => #<Grit::Blob "4ebc8aea50e0a67e000ba29a30809d0a7b9b2666">
여기에 설명되지 않은 API 메서드가 더 많이 있습니다. 더 많은 기능을 보려면 코드를 참조하세요.
저작권 (c) 2010 Tom Preston-Werner. 자세한 내용은 라이센스를 참조하세요.