This developer documentation isoutdated, but provides historical context.

It isnotuser documentation and should not be treated as such.

Documentation is available here.

Infrastructure git repository


This repository is a private git repo setup for maintaining server configurations. This also gives us a quick way to rollback changes.

In the future there may be other services that supersede this need, but for now this is a lightweight solution to the problem.


  1. Make the config folder symlink: cd /root/git/ ln -s /path/to/foo-project/config/ ovirt-infra-foo

  2. Change in to the config folder via the symlink, then initiate a git repo: cd ovirt-infra-foo git init

  3. Add one or more files and directories to the repository, then commit the changes: git add * ## Or a specific file or directory git commit -m “Initial commit message.”

  4. Change to the local git root and make a directory for the new git repo: cd /usr/local/git_root/ mkdir ovirt-infra-foo.git

  5. Change to the new directory and initiate the bare repository: cd ovirt-infra-foo.git/ git –bare init

  6. These configurations make sure everything is kept group read/write; merges are disallowed on push; and directory permissions are set: git config core.sharedrepository 1 git config receive.denyNonFastforwards true find objects -type d -exec chmod 02770 {} \;

  7. Change back to the original directory, set the new origin location for tracking, and push up the initial commit: cd /root/git/ovirt-infra-foo git remote add origin /usr/local/git_root/ovirt-infra-foo.git git push origin master

  8. Create local “master” branch that is tracking “origin/master”, switch to the new branch: git checkout origin/master git branch -f master origin/master git checkout master

Example session

[root@linode01 git]# ln -s /usr/lib/mailman/Mailman/ ovirt-infra-mailman
[root@linode01 git]# cd ovirt-infra-mailman/
[root@linode01 ovirt-infra-mailman]# ls
Archiver           Digester.pyc        HTMLFormatter.pyc  Mailbox.pyo              OldStyleMemberships.pyo   Digester.pyo        HTMLFormatter.pyo                   TopicMgr.pyc
Autoresponder.pyc             MailList.pyc             Pending.pyc              TopicMgr.pyo
Autoresponder.pyo  Errors.pyc          i18n.pyc           MailList.pyo             Pending.pyo             Errors.pyo          i18n.pyo                   UserDesc.pyc
Bouncer.pyc        MemberAdaptor.pyc        Post.pyc                 UserDesc.pyo
Bouncer.pyo        GatewayManager.pyc  __init__.pyc       MemberAdaptor.pyo        Post.pyo       
Bouncers           GatewayManager.pyo  __init__.pyo               Queue                    Utils.pyc
Cgi             Message.pyc                  Utils.pyo
Commands           Generator.pyc       ListAdmin.pyc      Message.pyo              SafeDict.pyc           Generator.pyo       ListAdmin.pyo                SafeDict.pyo             Version.pyc
Defaults.pyc       Gui               mm_cfg.pyc            Version.pyo
Defaults.pyo       Handlers            LockFile.pyc           SecurityManager.pyc       LockFile.pyo       mm_cfg.pyo               SecurityManager.pyo      versions.pyc
Deliverer.pyc      htmlformat.pyc      Logging            MTA                              versions.pyo
Deliverer.pyo      htmlformat.pyo   Site.pyc    Mailbox.pyc        OldStyleMemberships.pyc  Site.pyo
[root@linode01 ovirt-infra-mailman]# git init
Initialized empty Git repository in /usr/lib/mailman/Mailman/.git/
[root@linode01 ovirt-infra-mailman]# git add
[root@linode01 ovirt-infra-mailman]# git commit -m "Mailman git only needs the single config file, afaict."
[master (root-commit) 93777d4] Mailman git only needs the single config file, afaict.
 Committer: root <>
Your name and email address were configured automatically based
on your username and hostname. Please check that they are accurate.
You can suppress this message by setting them explicitly:

    git config --global "Your Name"
    git config --global

If the identity used for this commit is wrong, you can fix it with:

    git commit --amend --author='Your Name <>'

 1 files changed, 100 insertions(+), 0 deletions(-)
 create mode 100644
[root@linode01 ovirt-infra-mailman]# pwd
[root@linode01 ovirt-infra-mailman]# cd /usr/local/git_root/
[root@linode01 git_root]# ls
[root@linode01 git_root]# mkdir ovirt-infra-mailman.git
[root@linode01 git_root]# cd ovirt-infra-mailman.git/
[root@linode01 ovirt-infra-mailman.git]# git --bare init
Initialized empty Git repository in /usr/local/git_root/ovirt-infra-mailman.git/
[root@linode01 ovirt-infra-mailman.git]# git config core.sharedrepository 1
[root@linode01 ovirt-infra-mailman.git]# git config receive.denyNonFastforwards true
[root@linode01 ovirt-infra-mailman.git]# find objects -type d -exec chmod 02770 {} \;
[root@linode01 ovirt-infra-mailman.git]# cd /root/git/ovirt-infra-mailman/
[root@linode01 ovirt-infra-mailman]# git remote add origin /usr/local/git_root/ovirt-infra-mailman.git/
[root@linode01 ovirt-infra-mailman]# git push origin master
Counting objects: 3, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 1.92 KiB, done.
Total 3 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (3/3), done.
To /usr/local/git_root/ovirt-infra-mailman.git/
 * [new branch]      master -> master
[root@linode01 ovirt-infra-mailman]# git checkout origin/master
Note: checking out 'origin/master'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. Example:

  git checkout -b new_branch_name

HEAD is now at 93777d4... Mailman git only needs the single config file, afaict.
[root@linode01 ovirt-infra-mailman]# git branch -f master origin/master
Branch master set up to track remote branch master from origin.
[root@linode01 ovirt-infra-mailman]# git checkout master
Switched to branch 'master'


Category:Infrastructure documentation