Skip to contentSkip to conversation

Sharing home and etc files with git

DISCUSSION iiijjjiii 3 participants 3 messages Jun 15, 2016

lore
Share & tools
lore

iiijjjiii

author
#0 lore raw

I would like to use git to keep revision histories of my home and etc directories. I have several computers and I like to keep their environments similar. I could see git pulls updating .bash_aliases, .bashrc, and various bash and perl scripts I create in the home directory, and updating /etc config files. Git pushes would share any recent changes to other computers. This way no matter which computer I am working on, the environment will be similar and I can make changes and know they will be copied to the others.

I haven't figured out a good way to deal with the files that have local settings in them. Using .gitignore feels a little overkill. Only certain lines of the files need to be unique. Once they are set, I'd like subsequent changes to be updated. I could cherry-pick manually but I'd like a more automated method. I have read about etckeeper, git-home-history and gibak, but they seem to be designed for backing up and versioning files on one computer and not for sharing files.

Has anyone done something similar using git or is another tool more suitable.

Thanks
jimk

#1 lore raw
Quoted 2 lines · iiijjjiii

I would like to use git to keep revision histories of my home and etc directories.

First, git is to track content, not permissions. So it is not the right tool.

Second, you can try etckeeper which does this on top of git.

But still please keep in mind that you may have serious problems, like:
if you get a conflict in /etc/passwd, you may not be able to login, etc...

#2 lore raw
In reply to iiijjjiii
Quoted 8 lines · iiijjjiii

I would like to use git to keep revision histories of my home and etc directories. I have several computers and I like to keep their environments similar. I could see git pulls updating .bash_aliases, .bashrc, and various bash and perl scripts I create in the home directory, and updating /etc config files. Git pushes would share any recent changes to other computers. This way no matter which computer I am working on, the environment will be similar and I can make changes and know they will be copied to the others.

Completely understandable; also remember that pushing, unlike pulling, does not update the working tree (and you wouldn't want it to).

Quoted 11 lines

I haven't figured out a good way to deal with the files that have local
settings in them. Using .gitignore feels a little overkill. Only certain lines of the files need to be unique. Once they are set, I'd like subsequent changes to be updated. I could cherry-pick manually but I'd like a more automated method. I have read about etckeeper, git-home-history and gibak, but they seem to be designed for backing up and versioning files on one computer and not for sharing files.

Has anyone done something similar using git or is another tool more
suitable.

I'm fairly certain there are tools out there for this, but what I do is I have all of the files that I want to add (such as ~/.${SHELL}rc, ~/.${SHELL}.d/*, and .emacs) into ~/.git-home; then I symlink all of these files/directories into my $HOME (with a short script that's also checked in).

I then throw this entire repo somewhere where all my other machines can pull/push from, and I resolve merges as needed. It works fairly well.

Signature · 1 line
Kelvie Wong