

Git dotfiles without the bloat (rake, yadr, make, kitchen sink) - jpiasetz
http://blog.piasetzki.name/post/15190147170/git-dotfiles-without-the-bloat-rake-yadr-make

======
sciurus
This really is super-simple, and I like that. However, it doesn't handle
configuration files that don't go directly in your home directory, such as
$HOME/.ssh/config. I wrote something a few weeks ago which does that while
remaining conceptually very simple. You can get it at
<https://github.com/sciurus/dotfile_management>

------
shtylman
Why not just have a git repo working copy in your $HOME directory? That way
you can avoid any symlinking mess. The actual dotfiles are the ones from the
working copy.

I used to do symlinking but found the working copy in $HOME approach much
better.

~~~
fr0sty
That could work, but where would the .git/ directory be? If you have in
$HOME/.git you are inviting disaster with an errant 'git clean...' command. If
not you need to deal with managing the options/environment to make the git
commands work (though that could be scripted).

I'm curious about this too since something dead simple (and reasonably idiot-
proof) would be useful to me as well.

~~~
nixme
With * in .gitignore, you'd have to use '-x' with 'git clean' to delete
everything. That's idiot-proof enough for me.

~~~
fr0sty
Do you intend to never use 'git clean -x...' anywhere in your home directory?
when you run 'git <command>' git will go upward through the directory tree
until it finds a .git directory. If you intend to run 'git clean -fx' in
~/foo/project/src but are instead in ~/foo/tmp/src/ (which is not a git
repository) it will run that clean against all of ~/ instead.

Having ~/dotfiles/.git and aliasing a command that sets
GIT_DIR=~/dotfiles/.git and GIT_WORKDIR appropriately would be safer.

~~~
nixme
I understand the .git search path, but I almost never use `git clean` in my
projects (usually just `git reset --hard` or `make clean`), so I've never been
too worried.

But your solution is definitely safer -- although I think you meant
GIT_WORK_TREE, not GIT_WORKDIR, right? I'm going to switch. Thanks!

EDIT: Working nicely :)
[https://github.com/nixme/dotfiles/commit/64486fe25e6750567a0...](https://github.com/nixme/dotfiles/commit/64486fe25e6750567a01cea49f527686c56ea365)

~~~
fr0sty
> I... usually just `git reset --hard`

This is still risky if your ~/.git had uncommitted changes. I'll admit to
being a little paranoid but I spent enough time on the #git irc channel to
learn that any advice that is potentially dangerous will _always_ be used in
the dangerous fashion, often without knowledge of the risks. > although I
think you meant GIT_WORK_TREE, not GIT_WORKDIR, right?

Yeah, brain cramp on that one, sorry.

------
joeyh
Fails to delete symlinks to removed dotfiles. Doesn't support splitting
dotfiles amoung multiple repositories.

I feel that the right solution to this is going to be
vcsh.<https://github.com/RichiH/vcsh> No symlinks to dotfiles, all the files
live in $HOME, but vcsh can be used to switch between accessing different git
repositories that contain different of the dotfiles. <http://vcs-
home.branchable.com/> has more.

(Also, rake? yadr? vcsh is a posix shell script.)

~~~
sciurus
Sure it supports splitting dotfiles among multiple repositories. Just create
multiple repositories and change the path in the post-commit hook. Deleting
symlinks would be nice, but I'm not sure it's worth the complexity
implementing it would add.

vcsh sounds like a neat system if you need to have multiple repositories with
the same working directory, but I don't understand the advantages of this for
managing your dotfiles. My eyes glazed over when reading about the proposed
system in section 3.2 of the README.

------
uncr3ative
I want to be able to manage other config files that aren't in my home
directory at all. Some of them are even owned by root: httpd-vhosts.conf,
/etc/hosts, php.ini... any good solution for that? I'm willing for it to be
complex if it works.

~~~
graysnorf
Manage in what sense? If you're trying to sync. between multiple machines, one
approach is to check in the /etc files in your home dir and symlink. Or are
you looking for something else?

------
g3orge
I can't see the whole line of the code.

~~~
jpiasetz
Fixed. It's also in the git repo.

