Profile Management with Git and GitHub

The following describes a simple way to manage you profile configuration files using GitHub.

Features

  • Centralized configuration management
  • Files live in their native locations (no symbolic linking)
  • Home directory is not a Git repository
  • All the power of git with a simple alias

Setup Repository

  1. Log into GitHub and create a repository named config
  2. Add your public keys to GitHub (if you haven’t done so already)
  3. Open a terminal and switch to your home directory
    cd ~
  4. Create a configuration directory
    mkdir .config.git
  5. Add the following alias to your current session and your .bash_profile
    alias config='git --git-dir=$HOME/.config.git/ --work-tree=$HOME'
    echo "alias config='git --git-dir=$HOME/.config.git/ --work-tree=$HOME'" >> .bash_profile
  6. Add your .bash_profile to the configuration repository
    config add .bash_profile
  7. Commit the changes
    config commit -m 'Initial commit'
  8. Change the origin to GitHub
    config remote add origin git@github.com:GITHUB_USERNAME/config.git
  9. Push the changes
    config push origin master

If you get an error when running config pull to the effect of You asked me to pull without... run the follow:

echo -e '[branch "master"]\n  remote = origin\n  merge = refs/heads/master' >> ~/.config.git/config

Setup Configuration Management on a Different System

  1. Add your public keys to GitHub (if you haven’t done so already)
  2. Switch to your home directory
    cd ~
  3. Backup your local configuration files, example:
    mv .bash_profile .bash_profile.bk
  4. Clone your configuration repository
    git clone git@github.com:GITHUB_USERNAME/config.git config.git
  5. Move the git metadata to ~/.config.git
    mv config.git/.git .config.git
  6. Enable dotglob
    shopt -s dotglob
  7. Move your configuration files to your home directory
    mv -i config.git/* .
  8. Delete the config.git directory
    rmdir config.git
  9. Logout and log back in

Basic Usage

  • config pull – get latest configuration changes
  • config add FILENAME – add a configuration file
  • config commit -a – save all configuration changes
  • config push – push configuration changes to GitHub
  • and any other config GIT_OPTION

You can see my configuration repository at http://github.com/silas/config.

Source: Manage your $HOME with git by Robert Escriva

Tags: , ,