This will overwrite any existing files in your home directory. Use at your own risk. it is a condensed version of what is described below.
source <(curl -s https://raw.githubusercontent.com/festen/dotfiles/HEAD/scripts/install.sh)
Based on an article (copied below): Dotfiles the easy way https://dev.to/bowmanjd/dotfiles-the-easy-way-3iio
cd ~ || exit 1
git clone -c status.showUntrackedFiles=no -n --separate-git-dir .git "$REPO_URL" tmpdir
rm -r tmpdir
Rationale:
status.showUntrackedFiles
is set to "no" so that futuregit status
requests only show files that were intentionally tracked withgit add
andgit commit
-n
means no checkout. We aren't ready for it yet.--separate-git-dir .git
takes some explanation. It is impossible togit clone
into a non-empty directory without some extra steps. This trick does it in one step (two if you count the deletion of the throwaway directory). Tell Git to use a separate Git directory but then, sneaky miscreants that we are, we name the directory the default:.git
- The undesirable side effect is an extra directory
tmpdir
that has a single.git
file of no consequence. The entire directory can safely be removed.
git checkout
Deal with any file conflicts. For instance, you might backup and remove an existing .bashrc
. Then run git checkout again. If you are sure that overwriting is OK, you can pass the force flag:
git checkout -f
If this is a brand new setup, your repo is likely empty. Add some files:
git add .bashrc
git commit -m "initial commit of Bash config"
Repeat as necessary with additional files and directories. Then push:
git push
Keep your files up to date with git add
, git commit
, git push
. Pull remote changes with git pull
. In other words, manage your home directory as you would any other Git repo. Please avoid git add .
as that will track every file in your home directory, an undesirable endeavor.
If this spawns other creative ideas or optimizations, feel free to post in the comments!