Git Operations

Manage git repositories and configuration.

Facts used in these operations: files.Directory, files.File, git.GitBranch, git.GitConfig, git.GitTag, git.GitTrackingBranch.

git.bare_repo

Create bare git repositories.

git.bare_repo(path: str, user: str | None=None, group: str | None=None, present=True, **kwargs)

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

ample:**

ode:: python

git.bare_repo(

name=”Create bare repo”, path=”/home/git/test.git”,

) Note:

This operation also inherits all global arguments.

git.config

Manage git config at repository, user or system level.

git.config(key: str, value: str, multi_value=False, repo: str | None=None, system=False, **kwargs)

key**: the key of the config to ensure value**: the value this key should have multi_value**: Add the value rather than set it for settings that can have multiple values repo**: specify the git repo path to edit local config (defaults to global) system**: whether, when repo is unspecified, to work at system level (or default to global)

amples:**

ode:: python

git.config(

name=”Always prune specified repo”, key=”fetch.prune”, value=”true”, repo=”/usr/local/src/pyinfra”,

)

git.config(

name=”Ensure user name is set for all repos of specified user”, key=”user.name”, value=”Anon E. Mouse”, _sudo=True, _sudo_user=”anon”

)

git.config(

name=”Ensure same date format for all users”, key=”log.date”, value=”iso”, system=True

) Note:

This operation also inherits all global arguments.

git.repo

Clone/pull git repositories.

git.repo(
    src: str, dest: str, branch: str | None=None, pull=True, rebase=False,
    user: str | None=None, group: str | None=None, ssh_keyscan=False, update_submodules=False,
    recursive_submodules=False, **kwargs,
)

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

ample:**

ode:: python

git.repo(

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

) Note:

This operation also inherits all global arguments.

git.worktree

Manage git worktrees.

git.worktree(
    worktree: str, repo: str | None=None, detached=False, new_branch: str | None=None,
    commitish: str | None=None, pull=True, rebase=False,
    from_remote_branch: tuple[str, str] | None=None, present=True, assume_repo_exists=False,
    force=False, user: str | None=None, group: str | None=None, **kwargs,
)

worktree**: git working tree directory repo**: git main repository directory detached**: create a working tree with a detached HEAD 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**: whether to use --force when adding/removing worktrees user**: chown files to this user after group**: chown files to this group after

amples:**

ode:: python

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 from the tag 4e091aa0, even if already registered”, repo=”/usr/local/src/pyinfra/master”, worktree=”/usr/local/src/pyinfra/2.x”, commitish=”2.x”, force=True

)

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=”Idempotent worktree creation, never pulls”, repo=”/usr/local/src/pyinfra/master”, worktree=”/usr/local/src/pyinfra/hotfix”, new_branch=”v1.0”, commitish=”v1.0”, pull=False

)

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,

) Note:

This operation also inherits all global arguments.