NAME GitStore - Git as versioned data store in Perl VERSION version 0.13 SYNOPSIS use GitStore; my $gs = GitStore->new('/path/to/repo'); $gs->set( 'users/obj.txt', $obj ); $gs->set( ['config', 'wiki.txt'], { hash_ref => 1 } ); $gs->commit(); $gs->set( 'yyy/xxx.log', 'Log me' ); $gs->discard(); # later or in another pl my $val = $gs->get( 'user/obj.txt' ); # $val is the same as $obj my $val = $gs->get( 'config/wiki.txt' ); # $val is { hashref => 1 } ); my $val = $gs->get( ['yyy', 'xxx.log' ] ); # $val is undef since discard DESCRIPTION It is inspired by the Python and Ruby binding. check SEE ALSO METHODS new GitStore->new('/path/to/repo'); GitStore->new( repo => '/path/to/repo', branch => 'mybranch' ); GitStore->new( repo => '/path/to/repo', author => 'Someone Unknown ' ); repo your git directory or work directory (*GitStore* will assume it's a work directory if it doesn't end with ".git"). branch your branch name, default is 'master' author It is used in the commit info set($path, $val) $gs->set( 'yyy/xxx.log', 'Log me' ); $gs->set( ['config', 'wiki.txt'], { hash_ref => 1 } ); $gs->set( 'users/obj.txt', $obj ); Store $val as a $path file in Git $path can be String or ArrayRef. Any leading slashes ('/') in the path will be stripped, as to make it a valid Git path. The same grooming is done for the "get()" and "delete()" methods. $val can be String or Ref[HashRef|ArrayRef|Ref[Ref]] or blessed Object get($path) $gs->get( 'user/obj.txt' ); $gs->get( ['yyy', 'xxx.log' ] ); Get $val from the $path file $path can be String or ArrayRef get_revision( $path ) Like "get()", but returns the GitStore::Revision object corresponding to the latest Git revision on the monitored branch for which $path changed. delete($path) remove($path) remove $path from Git store commit $gs->commit(); $gs->commit('Your Comments Here'); commit the set changes into Git discard $gs->discard(); discard the set changes history($path) Returns a list of GitStore::Revision objects representing the changes brought to the *$path*. The changes are returned in ascending commit order. list($regex) @entries = $gs->list( qr/\.txt$/ ); Returns a list of all entries in the repository, possibly filtered by the optional *$regex*. FAQ why the files are not there? run git checkout any example? # if you just need a local repo, that's all you need. mkdir sandbox cd sandbox git init # use GitStore->new('/path/to/this/sandbox') # set something git checkout # follows are for remote git url git remote add origin git@github.com:fayland/sandbox2.git git push origin master # do more GitStore->new('/path/to/this/sandbox') later git checkout git pull origin master git push KNOWN BUGS If all files are deleted from the repository, a 'dummy' file will be created to keep Git happy. SEE ALSO Article Python binding Ruby binding Git URL AUTHORS * Fayland Lam * Yanick Champoux COPYRIGHT AND LICENSE This software is copyright (c) 2012 by Fayland Lam . This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.