Git::Database::Tutorial - Learn how to use Git::Database
version 0.012
use Git::Database; # do cool stuff with Git, using the following advice # and the Perl Git wrapper of your choice
The local Git repository, as managed by git.
A class doing the Git::Database::Role::Backend role. The Git::Database module acts as a frontend that returns a backend object.
It manages all interactions with the Git repository, via its store. A backend instance is always connected to a store instance.
The backend interface is split across several roles, each requiring one or more access methods to be defined. The roles are: Git::Database::Role::Backend (this is the minimum required role that a class must do to be considered a backend), Git::Database::Role::ObjectReader, Git::Database::Role::ObjectWriter, Git::Database::Role::RefReader and Git::Database::Role::RefWriter.
Git::Database::Backend::None is a special backend class that is not connected to a store. The only supported method is hash_object.
The Perl Git wrapper that reads and write the data from and to the repository.
A store instance is always connected to an actual Git repository.
The backend class is named after the store class. For example, the backend class for Git::Repository stores is named Git::Database::Backend::Git::Repository.
The currently supported stores are (by order of appearance): Git::Repository, Git::Sub, Git::PurePerl, Cogit, Git, Git::Wrapper, and Git::Raw::Repository. If you know of other Git wrappers, please let me know or submit patches. Thanks!
The following one-liner will list which stores are currently installed:
perl -MGit::Database -E 'say for Git::Database->available_stores'
An object from the Git object database. Represented in Perl by the Git::Database::Object::Blob, Git::Database::Object::Tree, Git::Database::Object::Commit and Git::Database::Object::Tag classes.
A reference (tag or branch) in the Git repository.
The Git::Database module is really a simple factory class that returns "backend" objects. The actual backend class depends on the Git wrapper module used to access the Git repository.
The generic way is:
# $r is an instance of some Perl Git wrapper my $db = Git::Database->new( store => $r );
For example, if $r is a Git::Repository object, $db is going to be a Git::Database::Backend::Git::Repository object.
$r
$db
Example:
# use Git::Repository with a repository in the current working directory my $db = Git::Database->new( store => Git::Repository->new ); $db->isa('Git::Database::Backend::Git::Repository'); # true
Git::Sub is a special backend, as it's the only one that does not provide an object-oriented interface. When given a "store" that does not the Git::Database::Role::Backend role, Git::Database assumes it's a directory name, and creates a Git::Database::Backend::Git::Sub object to handle it.
For the moment, there is no way to perform an "automatic selection" of the backend based on what's available.
This is outside of the realm of Git::Database, since it must be handed an existing "store" object.
The Git::Repository::Tutorial documentation has detailed examples of how to create or clone a new repository.
Other Git wrappers may also be able to create new repositories.
The resulting object can then be passed to Git::Database->new as the store attribute.
Git::Database->new
store
There are two ways to create a Git object (doing the Git::Database::Role::Object role), with subtle differences between them.
my $blob = Git::Database::Object::Blob->new( content => "Hello, world!" ); $blob->isa("Git::Database::Object::Blob"); # true $blob->has_backend; # false $blob->digest; # use hash_object() from Git::Database::Backend::None $blob->has_backend; # true $blob->backend->isa("Git::Database::Backend::None");
my $blob = $backend->create_object( kind => 'blob', content => "Hello, world!" ); $blob->isa("Git::Database::Object::Blob"); # true $blob->has_backend; # true $blob->digest; # use hash_object() from $backend (might be faster) $blob->backend->isa( ref $backend );
When no backend is provided, a default Git::Database::Backend::None is created as needed. Its hash_object method is the default implementation provided by Git::Database::Role::Backend.
Philippe Bruhat (BooK) <book@cpan.org>.
Copyright 2016 Philippe Bruhat (BooK), all rights reserved.
This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
To install Git::Database, copy and paste the appropriate command in to your terminal.
cpanm
cpanm Git::Database
CPAN shell
perl -MCPAN -e shell install Git::Database
For more information on module installation, please visit the detailed CPAN module installation guide.