# Getting started with vcsh #
-Below you will find three methods for setting up vcsh:
+Below, you will find a few different methods for setting up vcsh:
1. The template way
2. The steal-from-template way
3. The manual way
+4. Using vcsh without mr
# 1. The template way #
-## Prerequisites ##
+## 1.1 Prerequisites ##
Make sure none of the following files/diretories exist for your test (user). If they do, move them away for now:
apt-get install mr # this is optional, but highly recommended
-## Clone the template ##
+## 1.2 Clone the template ##
mkdir -p ~/work/git
cd !$
cd
vcsh clone git://github.com/RichiH/vcsh_mr_template.git mr.vcsh
-## Enable your test repository ##
+## 1.3 Enable your test repository ##
mv ~/.zsh ~/zsh.bak
mv ~/.zshrc ~/zshrc.bak
cd
mr up
-## Set up your own repositories ##
+## 1.4 Set up your own repositories ##
Now, it's time to edit the template config and fill it with your own remotes:
Done!
-## Daily use ##
+## 1.5 Daily use ##
-### Keeping repositories up-to-date ###
+### 1.5.1 Keeping repositories up-to-date ###
This is the beauty of it all. Once you are set up, just run:
Neat.
-### Making changes ###
+### 1.5.2 Making changes ###
After you have made some changes, for which you would normally use `git add` and `git commit`, use the vcsh wrapper (like above):
# $XDG_CONFIG_HOME/mr/available.d to $XDG_CONFIG_HOME/mr/config.d
~ % cd
~ % mr -j 5 up
+
+# 4. Using vcsh without mr #
+
+vcsh encourages you to use mr.
+It helps you manage a large number of repositories by running the necessary vcsh commands for you.
+You may choose not to use mr, in which case you will have to run those commands manually or by other means.
+
+## 4.1 A few examples ##
+
+To initialize a new repository: `vcsh init zsh`
+
+To clone a repository: `vcsh clone ssh://<remote>/zsh.git`
+
+To interact with a repository, use the regular Git commands, but prepend them with `vcsh run $repository_name`.
+For example:
+
+ vcsh run zsh git status
+ vcsh run zsh git add -f .zshrc
+ vcsh run zsh git commit
+
+Obviously, without mr keeping repositories up-to-date, it will have to be done manually.
+Alternatively, you could try something like this:
+
+ for repo in `vcsh list`; do
+ vcsh run $repo git pull;
+ done
+
+----------
+Questions? RichiH@{Freenode,OFTC,IRCnet}
However, it does not create symbolic links in $HOME; it puts the actual files right into $HOME.
Furthermore, by making use of mr [1], it makes it very easy to enable/disable and clone a large number of repositories.
+The use of mr is technically optional, but it will be an integral part of the proposed system that follows.
## Default Directory Layout ##
To illustrate, this is what a possible directory structure looks like.
- $HOME
- |-- .config
- | |-- mr
- | | |-- available.d
- | | | |-- zsh.vcsh
- | | | |-- gitconfigs.vcsh
- | | | |-- lftp.vcsh
- | | | |-- offlineimap.vcsh
- | | | |-- s3cmd.vcsh
- | | | |-- tmux.vcsh
- | | | |-- vim.vcsh
- | | | |-- vimperator.vcsh
- | | | |-- snippets.git
- | | |-- config.d
- | | | |-- zsh.mrconfig -> ../available.d/zsh.mrconfig
- | | | |-- gitconfigs.mrconfig -> ../available.d/gitconfigs.mrconfig
- | | | |-- tmux.mrconfig -> ../available.d/tmux.mrconfig
- | | | `-- vim.mrconfig -> ../available.d/vim.mrconfig
- | `-- vcsh
- | `-- repo.d
- | |-- zsh.git -----------+
- | |-- gitconfigs.git |
- | |-- tmux.git |
- | `-- vim.git |
- |-- [...] |
- |-- .zshrc <----------------------+
- |-- .gitignore
- |-- .mrconfig
- `-- .mrtrust
+ $HOME
+ |-- .config
+ | |-- mr
+ | | |-- available.d
+ | | | |-- zsh.vcsh
+ | | | |-- gitconfigs.vcsh
+ | | | |-- lftp.vcsh
+ | | | |-- offlineimap.vcsh
+ | | | |-- s3cmd.vcsh
+ | | | |-- tmux.vcsh
+ | | | |-- vim.vcsh
+ | | | |-- vimperator.vcsh
+ | | | |-- snippets.git
+ | | |-- config.d
+ | | | |-- zsh.mrconfig -> ../available.d/zsh.mrconfig
+ | | | |-- gitconfigs.mrconfig -> ../available.d/gitconfigs.mrconfig
+ | | | |-- tmux.mrconfig -> ../available.d/tmux.mrconfig
+ | | | `-- vim.mrconfig -> ../available.d/vim.mrconfig
+ | `-- vcsh
+ | `-- repo.d
+ | |-- zsh.git -----------+
+ | |-- gitconfigs.git |
+ | |-- tmux.git |
+ | `-- vim.git |
+ |-- [...] |
+ |-- .zshrc <----------------------+
+ |-- .gitignore
+ |-- .mrconfig
+ `-- .mrtrust
In this setup, ~/.mrconfig looks like:
- [DEFAULT]
- jobs = 5
- include = cat ~/.config/mr/config.d/*
+ [DEFAULT]
+ jobs = 5
+ include = cat ~/.config/mr/config.d/*
The files you see in ~/.config/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.mrconfig with read-only access to my zshrc repo looks likes. I.e. in this specific example, push can not work.
- [$HOME/.config/vcsh/repo.d/zsh.git]
- checkout = vcsh clone 'git://github.com/RichiH/zshrc.git'
- update = vcsh run bash git pull
- push = vcsh run bash git push
- status = vcsh run bash git status
+ [$HOME/.config/vcsh/repo.d/zsh.git]
+ checkout = vcsh clone 'git://github.com/RichiH/zshrc.git'
+ update = vcsh run bash git pull
+ push = vcsh run bash git push
+ status = vcsh run bash git status
~/.config/mr/available.d contains *all available* repositories.
Only files/links present in mr/config.d, however, will be used by mr.