X-Git-Url: https://git.madduck.net/code/vcsh.git/blobdiff_plain/034e25b7c4de8e60676f9a9ed7cd085a083083a9..781989852d9ba92486f1e35d7e87dfbb08eed2c6:/README.md?ds=inline diff --git a/README.md b/README.md index d761c82..889cb09 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -vcsh - manage and sync config files via git +vcsh - manage config files in $HOME via fake bare git repositories # Index # @@ -15,7 +15,7 @@ community around the general idea of version controlling your (digital) life. * IRC: #vcs-home on irc.oftc.net -* Mailing list: vcs-home@lists.madduck.net +* Mailing list: http://lists.madduck.net/listinfo/vcs-home * Pull requests or issues on https://github.com/RichiH/vcsh @@ -35,6 +35,11 @@ The following overview will try to give you an idea of the use cases and advantages of vcsh. See sections 3 and 4 for detailed instructions and examples. +## 2.1 Talks ## + +Some people found it useful to look at slides and videos explaining how vcsh works. +They can all be found at [here](http://richardhartmann.de/talks/). + # 3 Overview ## 3.1 Comparison to Other Solutions ## @@ -83,6 +88,7 @@ To illustrate, this is what a possible directory structure looks like. | | |-- tmux.vcsh -> ../available.d/tmux.vcsh | | `-- vim.vcsh -> ../available.d/vim.vcsh | `-- vcsh + | |-- config | `-- repo.d | |-- zsh.git -----------+ | |-- gitconfigs.git | @@ -90,13 +96,14 @@ To illustrate, this is what a possible directory structure looks like. | `-- vim.git | |-- [...] | |-- .zshrc <----------------------+ - |-- .gitignore + |-- .gitignore.d + | `-- zsh |-- .mrconfig `-- .mrtrust ### available.d ### -The files you see in $XDG_CONFIG_HOME/mr/available.d are mr configuration files +The files you see in $XDG\_CONFIG\_HOME/mr/available.d are mr configuration files that contain the commands to manage (checkout, update etc.) a single repository. vcsh repo configs end in .vcsh, git configs end in .git, etc. This is optional and your preference. For example, this is what a zsh.vcsh @@ -106,15 +113,18 @@ is for demonstration, only. Of course, you are more than welcome to clone from this repository and fork your own. [$XDG_CONFIG_HOME/vcsh/repo.d/zsh.git] - checkout = vcsh clone 'git://github.com/RichiH/zshrc.git' zsh - update = vcsh run zsh git pull - push = vcsh run zsh git push - status = vcsh run zsh git status - gc = vcsh run zsh git gc + checkout = vcsh clone 'git://github.com/RichiH/zshrc.git' $MR_REPO + push = echo "Cannot push to read-only repo" >&2 + #status = vcsh run $MR_REPO git $MR_ACTION + #commit = vcsh run $MR_REPO git $MR_ACTION + #gc = vcsh run $MR_REPO git $MR_ACTION + +The commented lines are only necessary if you are using `mr` prior to version +1.11. Starting with this version, `vcsh` support is properly integrated. ### config.d ### -$XDG_CONFIG_HOME/mr/available.d contains *all available* repositories. Only +$XDG\_CONFIG\_HOME/mr/available.d contains *all available* repositories. Only files/links present in mr/config.d, however, will be used by mr. That means that in this example, only the zsh, gitconfigs, tmux and vim repositories will be checked out. A simple `mr update` run in $HOME will clone or update those @@ -128,11 +138,13 @@ this: [DEFAULT] jobs = 5 - include = cat $XDG_CONFIG_HOME/mr/config.d/* + # Use if your mr does not have vcsh support in mainline, yet + include = cat /usr/share/mr/vcsh + include = cat ${XDG_CONFIG_HOME:-$HOME/.config}/mr/config.d/* ### repo.d ### -$XDG_CONFIG_HOME/vcsh/repo.d is the directory where all git repositories which +$XDG\_CONFIG\_HOME/vcsh/repo.d is the directory where all git repositories which are under vcsh's control are located. Since their working trees are configured to be in $HOME, the files contained in those repositories will be put in $HOME directly. @@ -150,11 +162,13 @@ To illustrate further, the following steps could move your desired configuration to a new host. 1. Clone the mr repository (containing available.d, config.d etc.); for - example: `vcsh clone git://github.com/RichiH/vcsh_mr_template.git` + example: `vcsh clone git://github.com/RichiH/vcsh_mr_template.git mr` 2. Choose your repositories by linking them in config.d (or go with the default you may have already configured by adding symlinks to git). -3. Run mr to clone the repositories: `cd; mr update`. -4. Done. +3. Make sure the line 'include = cat /usr/share/mr/vcsh' in .mrconfig points + to an existing file +4. Run mr to clone the repositories: `cd; mr update`. +5. Done. Hopefully the above could help explain how this approach saves time by @@ -179,29 +193,60 @@ Below, you will find a few different methods for setting up vcsh: Make sure none of the following files and directories exist for your test (user). If they do, move them away for now: -* ~/.gitignore +* ~/.gitignore.d * ~/.mrconfig -* $XDG_CONFIG_HOME/mr/available.d/mr.vcsh -* $XDG_CONFIG_HOME/mr/available.d/zsh.vcsh -* $XDG_CONFIG_HOME/mr/config.d/mr.vcsh -* $XDG_CONFIG_HOME/vcsh/repo.d/mr.git/ +* $XDG\_CONFIG\_HOME/mr/available.d/mr.vcsh +* $XDG\_CONFIG\_HOME/mr/available.d/zsh.vcsh +* $XDG\_CONFIG\_HOME/mr/config.d/mr.vcsh +* $XDG\_CONFIG\_HOME/vcsh/repo.d/mr.git/ All of the files are part of the template repository, the directory is where the template will be stored. apt-get install mr -#### 4.1.2 Clone the Template #### +#### 4.1.2 Install vcsh #### + +#### 4.1.2.1 Debian #### + +If you are using Debian Squeeze, you will need to enable backports + + apt-get install vcsh + +#### 4.1.2.2 Arch Linux #### + +vcsh is availabe via [AUR](https://aur.archlinux.org/packages.php?ID=54164) +and further documentation about the use of AUR is available +[on Arch's wiki](https://wiki.archlinux.org/index.php/Arch_User_Repository). + cd /var/abs/local/ + wget https://aur.archlinux.org/packages/vc/vcsh-git/vcsh-git.tar.gz + tar xfz vcsh-git.tar.gz + cd vcsh-git + makepkg -s + pacman -U vcsh*.pkg.tar.xz + +#### 4.1.2.3 From source #### + +If your version of mr is older than version 1.07, make sure to put + + include = cat /usr/share/mr/vcsh + +into your .mrconfig . + + # choose a location for your checkout + cd $HOME mkdir -p ~/work/git - cd !$ - git clone git://github.com/RichiH/vcsh.git vcsh + git clone git://github.com/RichiH/vcsh.git cd vcsh - ln -s vcsh /usr/local/bin # or add it to your PATH + ln -s vcsh /usr/local/bin # or add it to your PATH cd - vcsh clone git://github.com/RichiH/vcsh_mr_template.git mr.vcsh -#### 4.1.3 Enable Your Test Repository #### +#### 4.1.3 Clone the Template #### + + vcsh clone git://github.com/RichiH/vcsh_mr_template.git mr + +#### 4.1.4 Enable Your Test Repository #### mv ~/.zsh ~/zsh.bak mv ~/.zshrc ~/zshrc.bak @@ -210,7 +255,7 @@ the template will be stored. cd mr up -#### 4.1.4 Set Up Your Own Repositories #### +#### 4.1.5 Set Up Your Own Repositories #### Now, it's time to edit the template config and fill it with your own remotes: @@ -234,7 +279,9 @@ Done! You're welcome to clone the example repository: - git clone git://github.com/RichiH/vcsh_mr_template.git + vcsh clone git://github.com/RichiH/vcsh_mr_template.git mr + # make sure 'include = cat /usr/share/mr/vcsh' points to an exiting file + vim .mrconfig Look around in the clone. It should be reasonably simple to understand. If not, poke me, RichiH, on Freenode (query) or OFTC (#vcs-home). @@ -265,6 +312,8 @@ mr is used to actually retrieve configs, etc ~ % cat ~/.mrconfig [DEFAULT] + # adapt /usr/share/mr/vcsh to your system if needed + include = cat /usr/share/mr/vcsh include = cat $XDG_CONFIG_HOME/mr/config.d/* ~ % echo $XDG_CONFIG_HOME /home/richih/.config