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,
)