Test::Git(3pm)

πŸ’– Test::Git(3pm) πŸ’–

Okay bestie, this is the manual page for Test::Git(3pm) β€” aka the little helper squad for test scripts that need to make and manage a Git repository. It’s giving β€œtest setup but make it cute.” πŸŽ€


🌸 NAME 🌸

Test::Git β€” Helper functions for test scripts using Git


πŸ¦‹ SYNOPSIS πŸ¦‹

use Test::More;
use Test::Git;

# check there is a git binary available, or skip all
has_git();

# check there is a minimum version of git available, or skip all
has_git( '1.6.5' );

# check the git we want to test has a minimum version, or skip all
has_git( '1.6.5', { git => '/path/to/alternative/git' } );

# normal plan
plan tests => 2;

# create a new, empty repository in a temporary location
# and return a Git::Repository object
my $r = test_repository();

# clone an existing repository in a temporary location
# and return a Git::Repository object
my $c = test_repository( clone => [ $url ] );

# run some tests on the repository
...

πŸ’… DESCRIPTION πŸ’…

Test::Git provides a number of helpful functions when running test scripts that require the creation and management of a Git repository. Literally your test-suite bestie when Git repos need to appear out of thin air. ✨


πŸ‘‘ EXPORTED FUNCTIONS πŸ‘‘

🌟 has_git 🌟

has_git( $version, \%options );

Checks if there is a git binary available, or skips all tests. No git? No problem β€” we skip, bestie.

If the optional $version argument is provided, it also checks if the available git binary has a version greater or equal to $version.

This function also accepts an option hash of the same kind as those accepted by Git::Repository and Git::Repository::Command.

This function must be called before plan(), as it performs a skip_all if requirements are not met. So like, call it early or the vibe check fails. 😭

has_git is now obsolete and will print a warning when used. The test_requires_git function provided by the Test::Requires::Git module is a much more flexible replacement.
has_git will be removed in a future release.

πŸŽ€ test_repository πŸŽ€

test_repository( %options );

Creates a new empty git repository in a temporary location, and returns a Git::Repository object pointing to it. Iconic behaviour, honestly.

This function takes options as a hash. Each key will influence a different part of the creation process.

The keys are:

  • temp β€” Array reference containing parameters to File::Temp tempdir function. Default: "<[ CLEANUP =" 1 ]>>
  • init β€” Array reference containing parameters to git init. Must not contain the target directory parameter, which is provided by test_repository() (via File::Temp). Default: [] The init option is only supported with Git versions higher or equal to 1.6.2.rc0.
  • clone β€” Array reference containing parameters to git clone. Must not contain the target directory parameter, which is provided by test_repository() (via File::Temp). Note that clone and init are mutually exclusive and that test_repository() will croak if both are provided. This option has no default value, since at least a Git URL must be provided to the clone option. The clone option is only supported with Git versions higher or equal to 1.6.2.rc0.
  • git β€” Hash reference containing options for Git::Repository. Default: {}

This call is the equivalent of the default call with no options:

test_repository(
    temp => [ CLEANUP => 1 ],    # File::Temp::tempdir options
    init => [],                  # git init options
    git  => {},                  # Git::Repository options
);

To create a bare repository:

test_repository( init => [ '--bare' ] );

To leave the repository in its location after the end of the test:

test_repository( temp => [ CLEANUP => 0 ] );

Note that since test_repository() uses git init to create the test repository, it requires at least Git version 1.5.0.rc1.


⭐ AUTHOR ⭐

Philippe Bruhat (BooK) <book@cpan.org>


🫢 ACKNOWLEDGEMENTS 🫢

The clone option and capability of test_repository() owes a lot to Nathan Nutter (NNUTTER), who wanted to be able to clone into a test repository. King behaviour, truly. πŸ‘‘


🌈 SEE ALSO 🌈

  • Test::Requires::Git

Copyright 2010-2016 Philippe Bruhat (BooK), all rights reserved.


πŸ’œ LICENSE πŸ’œ

This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.


Okay that’s the whole page, bestie β€” brought to you by perl v5.40.1, dated 2026-01-31, and filed under Test::Git(3pm). Periodt. πŸ’…βœ¨

πŸ“¦ where this page comes from