vcsh - $HOME のためのバージョン管理システム - $HOME に複数の Git リポジトリを置くために
訳者より
この訳文について、誤植や誤訳などの問題があった場合、その責任は私(fumiu)にあります。
以下の日本語訳に関するご連絡は作者の RichiH 氏ではなく、
私へメール(fumiu at raythebm.net)して下さるようお願いいたします。
目次
30 秒 クイックスタートガイド
vcsh
には、かなり大量のドキュメントが付いており、そのコンセプトを説明するには git
の内部動作について細部に至るまで触れる必要がありますが、 vcsh
を使い始める事自体はとても簡単です。
例として、あなたが自分用の vim
設定をバージョン管理する場合を考えてみましょう:
vcsh init vim
vcsh vim add ~/.vimrc ~/.vim
vcsh vim commit -m 'Initial commit of my Vim configuration'
# もちろん、ファイル群はリモートのリポジトリに push できます
vcsh vim remote add origin <remote>
vcsh vim push -u origin master
# さあ、これで思う存分ファイルを変更してコミットできるようになりました
vcsh vim push
もし上の手順が通常の git
操作と ほとんど同じ ように見えたとしたら、それは偶然ではありません; そうなるようにデザインしたのです。
ソフトの紹介
vcsh は、ただ一つのディレクトリ内で複数の Git リポジトリを維持できるようにします。
デフォルト設定では vcsh
によって維持されている全ての Git リポジトリは、
実際のファイルを $HOME
に保存します。
もちろん、お望みなら別の動作に変更できます。
これらのリポジトリは各々の作業ツリーを、お互いが干渉したり破壊したりせずに維持されます。
つまり、あなたはアプリケーションやアプリケーションファミリーごと
-例えば zsh
, vim
, ssh
など- に
個別のリポジトリを持てるのです。
更に、異なるパソコン(あるいは異なるユーザ)用に clone する設定用リポジトリの組み合わせをカスタマイズできます。あなたが使いたいなら何処ででも、複数あるリポジトリから幾つかを
抜き出したり混ぜ合わせたりして利用できるのです。
例えば、サーバマシンでは mplayer
用の設定を利用しないことや、
個人用と仕事用のマシンにおいて root と 他のユーザ間で違う ssh
設定を
使うようにすること等が挙げられます。
大抵の UNIX ベースのシステムには vcsh
のパッケージがあります。
もしパッケージが存在しなければ、 INSTALL.md
を読んでインストール手順を進めるか、 PACKAGING.md
に従ってパッケージを自作するかして下さい。
首尾よく vcsh
パッケージを作成できたら、そのパッケージ用のブランチを
上流リポジトリに取り込ませて欲しいので、我々に連絡してもらえると助かります。
Talks
vcsh
の動作を理解するのに、ドキュメントを読むよりも
スライドや動画の方が分かりやすい場合もあります。
スライド、動画、その他の情報については
作者の talk ページ
にそれぞれのリンクがあります。
利用例
vcsh
リポジトリの利用方法には 3通りあります。
このセクションでは一番簡単で単純な方法のみを説明します。
他の二つの方法を必要とするような高度な利用法も多少はあるのですが、今のところは心配しなくても大丈夫です。
わざわざ残り二つの方法を試してみようなどと奇特な事を考えなければ、幸せでいられるでしょう。
なお、 vcsh enter
と vcsh run
に関しては後のセクションで触れています。
タスク | コマンド |
---|---|
"vim" という名前のリポジトリを新規作成する | vcsh init vim |
既存のリポジトリを clone する | vcsh clone <remote> <repository_name> |
リポジトリ "vim" にファイルを追加する | vcsh vim add ~/.vimrc ~/.vim |
vcsh vim commit -m 'Update Vim configuration' |
|
リポジトリ "vim" にリモートリポジトリを追加で設定する | vcsh vim remote add origin <remote> |
vcsh vim push origin master:master |
|
vcsh vim branch --track master origin/master |
|
リポジトリ "vim" の内容をリモートに push する | vcsh vim push |
リポジトリ "vim" についてリモートから pull する | vcsh vim pull |
全てのリポジトリについて変更されたファイルのステータスを表示する | vcsh status |
全てのリポジトリについて(それぞれ) pull する | vcsh pull |
全てのリポジトリについて(それぞれ) push する | vcsh push |
概要
無から vcsh へ
あなたは自分の設定ファイルの作成に多大な労力を費したことでしょう。 そして、その設定が保護され、かつ配布できたら、どんなに素晴しいだろうと考えませんでしたか?
ほとんどの人は $HOME
自体にバージョン管理用リポジトリを作成する事から始め、
そこに全ての設定ファイル(よく dotfile と呼ばれます)を追加していきます。
(人によっては他のファイルが含まれることもあります)
もちろんこれでも管理できますが、複数のパソコンに対応しようとした途端に厄介な事になります。
次に考えられるのは、例えば ~/.dotfiles
のようなディレクトリの中に
単一目的リポジトリをそれぞれ作成し、その中のファイルへのリンクを $HOME
に
作ることです。
この方法は、各ホストで特定のリポジトリのみをチェックアウトすればよいという柔軟性を提供します。
その一方、このアプローチにはリポジトリごとに手作業で clone とリンクの作成を
行わなければならないという欠点があります。
vcsh
は、このアプローチをもう一歩進めたものを提供します。
ある隠しディレクトリの中に単一目的リポジトリを保管して、それらを使うところまでは同じです。
しかしながら $HOME
にそれらのリンクを作成するのではなく、
対象のファイルそのものを $HOME
ディレクトリに設置します。
vcsh
によって任意個の異なるリポジトリを $HOME
に置けるため、
あなたは近いうちに沢山のリポジトリを持つことになるでしょう。
vcsh
他多数のリポジトリを管理するため、我々は
mr の利用を推奨します。
mr
は多種のバージョン管理システムにおけるデータの push や pull について
面倒をみてくれるのです。
vcsh
は mr
(複数種のリポジトリを管理するためのツール) を視野に入れてデザインされたため、
この二つの組み合わせは、とても相性が良いです。
mr
はネイティブに vcsh
リポジトリをサポートしており、
また vcsh
にとって mr
は管理対象の一つなのです。
このため、新しいパソコンを設定するのも容易なことです。
標準的なインストール完了から、文字通り 5分以内に設定を完了できます。
以上が mr
の出自の話です。
mr
の利用は技術的にはオプションとなっていますが、以降で示されている
システムを構成する重要な一部分なのです。
デフォルトのディレクトリ構造
以下はよく見られるディレクトリ構造を図にしたものです。
$HOME
|-- $XDG_CONFIG_HOME (defaults to $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.vcsh -> ../available.d/zsh.vcsh
| | |-- gitconfigs.vcsh -> ../available.d/gitconfigs.vcsh
| | |-- tmux.vcsh -> ../available.d/tmux.vcsh
| | `-- vim.vcsh -> ../available.d/vim.vcsh
| `-- vcsh
| |-- config
| `-- repo.d
| |-- zsh.git -----------+
| |-- gitconfigs.git |
| |-- tmux.git |
| `-- vim.git |
|-- [...] |
|-- .zshrc <----------------------+
|-- .gitignore.d
| `-- zsh
|-- .mrconfig
`-- .mrtrust
available.d
$XDG_CONFIG_HOME/mr/available.d に見られるファイルは mr の設定ファイルです。
それぞれは一つのリポジトリを管理(checkout, update など)するためのコマンドを含んでいます。
例では vcsh リポジトリの設定ファイルは名前の末尾が .vcsh となり、git リポジトリでは
末尾が .git となり、他のバージョン管理システムの場合も同様になっています。
このようなルールは一例であり、自分で好きな規則を決めるのが良いでしょう。
例えば、以下は私の zshrc リポジトリに対して読み込み専用アクセスを設定する zsh.vcsh の内容です。
当然ながら、この設定では私のリポジトリを利用しているため、他の人の push は動作しません。
これはあくまでデモ用ですから。
もちろん、このリポジトリを自分用に fork した後に、そちらを clone して利用するのは賢い選択ですね。
[$XDG_CONFIG_HOME/vcsh/repo.d/zsh.git]
checkout = vcsh clone 'git://github.com/RichiH/zshrc.git' zsh
update = vcsh zsh pull
push = vcsh zsh push
status = vcsh zsh status
gc = vcsh zsh gc
config.d
$XDG_CONFIG_HOME/mr/available.d には 利用可能な全ての リポジトリが含まれます。
一方、 mr/config.d にあるのは mr で利用されるファイルやリンクのみです。
上の例では、 zsh, gitconfigs, tmux, vim のリポジトリのみがチェックアウトされます。
$HOME で単に mr update
と打つと、config.d にリストされている 4つだけが clone もしくは update されます。
~/.mrconfig
最後に ~/.mrconfig ですが、このファイルは上の設定ファイル同士をたばねて、
mr up
等のコマンドで便利に全てのリポジトリを管理できるようにしています。
このファイルは以下のようになります:
[DEFAULT]
include = cat ${XDG_CONFIG_HOME:-$HOME/.config}/mr/config.d/*
repo.d
$XDG_CONFIG_HOME/vcsh/repo.d は vcsh の管理下にある全ての git リポジトリが置かれるディレクトリです。
これらのワーキングツリーは $HOME になるよう設定されているので、各リポジトリ内のファイルは $HOME ディレクトリに置かれます。
なお、当然ながら mr がこのようなディレクトリ構成で動くのは、このドキュメントに従って(上のように)設定された場合です。
vcsh は作成しようとするファイルが既に存在しないか確かめます。
もし存在していた場合には vcsh は警告を表示して終了します。
古いファイルをどこかへ移動するなどしてから再試行してください。
また、その後に(先ほど移動した)ローカル設定をマージして vcsh foo push
で push もできます。
新しいホストへ引っ越す
詳しく説明すれば、次のような手順で所望の設定を新しいホストへ移動できます。
-
mr リポジトリ(available.d や config.d を含む)を clone します。
例:vcsh clone git://github.com/RichiH/vcsh_mr_template.git mr
-
利用したいリポジトリを選び、 config.d 内にそれらへのリンクを作成します。
(または、git にリンクを追加しておいた自分用のデフォルト設定を利用してもよいです) -
次の mr コマンドで対象のリポジトリを全て clone します。
cd; mr update
- 以上で完了です。
できれば上の内容が、以下の事で節約できる時間がどれほどかを想像する助けになると良いのですが。
- 多数のリポジトリに対する管理や clone, update が(mr のおかげで)簡単になります。
- $HOME にファイルのリンクを作る必要が(vcsh のおかげで)なくなります。
もしあなたが vcsh を試してみてもいい気分であれば、以降の説明を眺めてください。
使い始めるには
以降では vcsh をセットアップするための 3種類の方法を示します。
- テンプレートを利用
- テンプレートを部分的に利用
- 全て手動
テンプレートを利用
必要な準備
操作を行うユーザにおいて以下のファイルやディレクトリが存在しない事を確認してください。
もし存在するなら移動やリネームしてから以降の手順に進んでください。
- ~/.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/
上の全てのファイルはテンプレートリポジトリに含まれており、ディレクトリはそれらを格納している場所になります。
apt-get install mr
(訳注:上のコマンドは Debian 系の Linux で mr パッケージをインストールするものです。 ご自分の環境に合わせて適切な手段で mr パッケージを導入してください。)
vcsh のインストール
Debian
もし Squeeze(バージョン 6.x) の場合は、コマンド実行の前に apt 設定へ
backport リポジトリを追加する必要があります。
Wheezy(バージョン 7.x) 以降ならば、そのまま次のコマンドを入力してください。
apt-get install vcsh
Gentoo
Gentoo Linux の場合は root ユーザで次のコマンドを実行してください。
emerge dev-vcs/vcsh
Arch Linux
vcsh の利用には AUR の設定が必要です。その方法についてのドキュメントは Arch's wiki (訳注:英語です。日本語訳は こちら) を参照してください。
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
ソースコードからインストール
# ソースコードをチェックアウトする場所を選びます(以下では ~/work/git)
mkdir -p ~/work/git
cd ~/work/git
git clone git://github.com/RichiH/vcsh.git
cd vcsh
sudo ln -s vcsh /usr/local/bin # もしくは PATH 環境変数を変更
cd
テンプレートの clone
vcsh clone git://github.com/RichiH/vcsh_mr_template.git mr
テストリポジトリの有効化
mv ~/.zsh ~/zsh.bak
mv ~/.zshrc ~/zshrc.bak
cd $XDG_CONFIG_HOME/mr/config.d/
ln -s ../available.d/zsh.vcsh . # zsh リポジトリを有効化するためにリンクを張ります
cd
mr up
あなた自身のリポジトリを設定
ここまで問題が無ければ、テンプレート設定を編集して、あなた用のリモートリポジトリが利用できます。
vim $XDG_CONFIG_HOME/mr/available.d/mr.vcsh
vim $XDG_CONFIG_HOME/mr/available.d/zsh.vcsh
新しい設定を作ることもできます。
vcsh init foo
vcsh foo add bar baz quux
vcsh foo remote add origin git://quuux
vcsh foo commit
vcsh foo push
cp $XDG_CONFIG_HOME/mr/available.d/mr.vcsh $XDG_CONFIG_HOME/mr/available.d/foo.vcsh
vim $XDG_CONFIG_HOME/mr/available.d/foo.vcsh # 対象のリポジトリを指すように変更します
以上で完了です。
テンプレートを部分的に利用
サンプルのリポジトリを clone します。
vcsh clone git://github.com/RichiH/vcsh_mr_template.git mr
# 'include = cat /usr/share/mr/vcsh' の部分が既存ファイルを指すように書き換えて下さい
vim .mrconfig
clone したディレクトリの内容を見て回ります。
サンプルは理解しやすいようシンプルに書かれているはずです。
もし分かりにくければ Freenode(query) か OFTC(#vcs-home) で作者の私 RichiH を捕まえてください。
(訳注:どちらもコミュニケーションは英語になります)
全て手動
以下は私が昔使っていたセットアップ手順です。 あなた自身のスタイルに合うよう調整するか、そのまま利用するか、都合の良い方を選んで下さい。
# 作業場所を用意します
mkdir -p ~/work/git
cd !$
# vcsh を clone し、コマンドを使えるようにします
git clone git://github.com/RichiH/vcsh.git vcsh
sudo ln -s ~/work/git/vcsh/vcsh /usr/bin/local
hash -r
自分の mr 設定を取得します。私の場合は次のように行っています。
vcsh clone ssh://<remote>/mr.git
cd $XDG_CONFIG_HOME/mr/config.d/
ln -s ../available.d/* .
mr を利用して設定などのファイルを実際に取得します。
~ % cat ~/.mrconfig
[DEFAULT]
# 必要なら /usr/share/mr/vcsh の部分をシステムに合わせて変更して下さい
include = cat /usr/share/mr/vcsh
include = cat $XDG_CONFIG_HOME/mr/config.d/*
~ % echo $XDG_CONFIG_HOME
/home/richih/.config
~ % ls $XDG_CONFIG_HOME/mr/available.d # 以下は私のリポジトリからランダムに選んだものです
git-annex gitk.vcsh git.vcsh ikiwiki mr.vcsh reportbug.vcsh snippets.git wget.vcsh zsh.vcsh
~ %
# ここで操作中のパソコンで利用する設定について $XDG_CONFIG_HOME/mr/available.d から
# $XDG_CONFIG_HOME/mr/config.d の中に ln -s を使ってリンクを張ります
~ % cd
~ % mr -j 5 up
mr の使い方 ; 抜粋編集版
リポジトリを最新版に維持するには
これが mr の真髄です。 一度セットアップすれば、次のコマンドを打つだけです。
mr up
mr push
すばらしい。
変更するには
いくつかの変更を行い、通常なら git add
や git commit
を
使う場面になったら、代わりに(上と同様) vcsh を使います。
vcsh foo add bar baz quux
vcsh foo commit
vcsh foo push
mr を使わずに vcsh を利用するには
vcsh は mr と組み合わせて利用することを勧めています。
これは mr によって本来手動で入力すべき vcsh のコマンドが処理され、大量のリポジトリを管理するのが容易になるためです。
これらを手動あるいは他の手段によって行うことにして、mr を利用しないという選択もできます。
新規リポジトリを作成して初期化: vcsh init zsh
リポジトリを clone: vcsh clone ssh://<remote>/zsh.git
リポジトリを操作するには、通常の Git コマンドを用いますが、
それらの前に vcsh run $repository_name
を付けます。
(訳注:上のように書いてありますが、例を見ると Git の場合には
run
と git
を除いても構わないようです。
Git 以外の場合は、説明通りコマンドにvcsh run $repository_name
を前置します)
以下がその例です。(訳注:$repository_name
は zsh ですね)
vcsh zsh status
vcsh zsh add .zshrc
vcsh zsh commit
当然ながら mr がリポジトリを最新版に維持してくれていた部分も手動で行うことになります。
一つの方法としては次のようなものがあります。
for repo in `vcsh list`; do
vcsh run $repo git pull;
done
連絡先
あなたのデジタルライフをバージョン管理するアイデアについて話し合う場がいくつかあります。
IRC(英語): #vcs-home on irc.oftc.net
メーリングリスト(英語): http://lists.madduck.net/listinfo/vcs-home
ご意見や Pull request は https://github.com/RichiH/vcsh へ(英語)