Git Operations

Manage git repositories and configuration.

git.bare_repo

Create bare git repositories.

git.bare_repo(path, user=None, group=None, present=True)
  • path: path to the folder
  • present: whether the bare repository should exist
  • user: chown files to this user after
  • group: chown files to this group after

Example:

git.bare_repo(
    name='Create bare repo',
    path='/home/git/test.git',
)

git.config

Manage git config for a repository or globally.

git.config(key, value, repo=None)
  • key: the key of the config to ensure
  • value: the value this key should have
  • repo: specify the git repo path to edit local config (defaults to global)

Example:

git.config(
    name='Ensure user name is set for a repo',
    key='user.name',
    value='Anon E. Mouse',
    repo='/usr/local/src/pyinfra',
)

git.repo

Clone/pull git repositories.

git.repo(
    src, dest, branch='master', pull=True, rebase=False, user=None, group=None,
    ssh_keyscan=False, update_submodules=False, recursive_submodules=False,
)
  • src: the git source URL
  • dest: directory to clone to
  • branch: branch to pull/checkout
  • pull: pull any changes for the branch
  • rebase: when pulling, use --rebase
  • user: chown files to this user after
  • group: chown files to this group after
  • ssh_keyscan: keyscan the remote host if not in known_hosts before clone/pull
  • update_submodules: update any git submodules
  • recursive_submodules: update git submodules recursively

Example:

git.repo(
    name='Clone repo',
    src='https://github.com/Fizzadar/pyinfra.git',
    dest='/usr/local/src/pyinfra',
)

git.worktree

Manage git worktrees.

git.worktree(
    worktree, repo=None, branch=None, create_branch=False, detached=False, new_branch=None,
    commitish=None, pull=True, rebase=False, from_remote_branch=None, present=True,
    assume_repo_exists=False, force=False, user=None, group=None,
)
  • worktree: git working tree directory
  • repo: git main repository directory
  • detached: create a working tree with a detached HEAD
  • branch: (deprecated)
  • create_branch: (deprecated)
  • new_branch: local branch name created at the same time than the worktree
  • commitish: from which git commit, branch, … the worktree is created
  • pull: pull any changes from a remote branch if set
  • rebase: when pulling, use --rebase
  • from_remote_branch: a 2-tuple (remote, branch) that identifies a remote branch
  • present: whether the working tree should exist
  • assume_repo_exists: whether to assume the main repo exists
  • force: remove unclean working tree if should not exist
  • user: chown files to this user after
  • group: chown files to this group after

Example:

git.worktree(
    name='Create a worktree from the current repo `HEAD`',
    repo='/usr/local/src/pyinfra/master',
    worktree='/usr/local/src/pyinfra/hotfix'
)

git.worktree(
    name='Create a worktree from the commit `4e091aa0`',
    repo='/usr/local/src/pyinfra/master',
    worktree='/usr/local/src/pyinfra/hotfix',
    commitish='4e091aa0'
)

git.worktree(
    name='Create a worktree with a new local branch `v1.0`',
    repo='/usr/local/src/pyinfra/master',
    worktree='/usr/local/src/pyinfra/hotfix',
    new_branch='v1.0',
)

git.worktree(
    name='Create a worktree from the commit 4e091aa0 with the new local branch `v1.0`',
    repo='/usr/local/src/pyinfra/master',
    worktree='/usr/local/src/pyinfra/hotfix',
    new_branch='v1.0',
    commitish='4e091aa0'
)

git.worktree(
    name='Create a worktree with a detached `HEAD`',
    repo='/usr/local/src/pyinfra/master',
    worktree='/usr/local/src/pyinfra/hotfix',
    detached=True,
)

git.worktree(
    name='Create a worktree with a detached `HEAD` from commit `4e091aa0`',
    repo='/usr/local/src/pyinfra/master',
    worktree='/usr/local/src/pyinfra/hotfix',
    commitish='4e091aa0',
    detached=True,
)

git.worktree(
    name='Create a worktree from the existing local branch `v1.0`',
    repo='/usr/local/src/pyinfra/master',
    worktree='/usr/local/src/pyinfra/hotfix',
    commitish='v1.0'
)

git.worktree(
    name='Create a worktree with a new branch `v1.0` that tracks `origin/v1.0`',
    repo='/usr/local/src/pyinfra/master',
    worktree='/usr/local/src/pyinfra/hotfix',
    new_branch='v1.0',
    commitish='v1.0'
)

git.worktree(
    name='Pull an existing worktree already linked to a tracking branch',
    repo='/usr/local/src/pyinfra/master',
    worktree='/usr/local/src/pyinfra/hotfix'
)

git.worktree(
    name='Pull an existing worktree from a specific remote branch',
    repo='/usr/local/src/pyinfra/master',
    worktree='/usr/local/src/pyinfra/hotfix',
    from_remote_branch=('origin', 'master')
)

git.worktree(
    name='Remove a worktree',
    worktree='/usr/local/src/pyinfra/hotfix',
    present=False,
)

git.worktree(
    name='Remove an unclean worktree',
    worktree='/usr/local/src/pyinfra/hotfix',
    present=False,
    force=True,
)