---
name: "Test::Git"
section: "3pm"
platform: "linux"
package: "libgit-repository-perl"
version: "1.325-3"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/Test::Git"
---

# Test::Git(3pm)

Helper functions for test scripts using Git

## 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.

## EXPORTED FUNCTIONS

### has\_git

```
    has_git( $version, \%options );
```

Checks if there is a git binary available, or skips all tests.

If the optional `$version` argument is provided, 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.

`"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.

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.

## SEE ALSO

Test::Requires::Git.

## COPYRIGHT

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.
