Profile (dotfiles) management using git


Following the suggestion in this blog post and following the instructions in profile management my dot files are now under source code control with git.

The given instructions were not complete: i.e. following this command:

    mkdir .config.git

you need to initialize/create the git repository:

    cd .config.git
    shopt -s dotglob
    git init
    mv .git/* .
    rmdir .git

Copied Page:

Profile Management with Git and GitHub

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


  • 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 ~

    # Create a configuration directory 
    mkdir .config.git

    # 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

    # Add your `.bash_profile` to the configuration repository 
    config add .bash_profile

    # Commit the changes
    config commit -m 'Initial commit'

    # Change the origin to GitHub 
    config remote add origin

    # 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

Add your public keys to GitHub (if you haven't done so already)

Switch to your home directory

    cd ~

Backup your local configuration files, example:

    mv .bash_profile .bash_profile.bk

Clone your configuration repository

    git clone config.git

Move the git metadata to ~/.config.git

    mv config.git/.git .config.git

Enable dotglob

    shopt -s dotglob

Move your configuration files to your home directory

    mv -i config.git/* .

Delete the config.git directory

    rmdir config.git

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 (broken).

Source: Manage your $HOME with git (broken) by Robert Escriva

Categories: Programming