(プログラム) 分散リビジョン管理
2009年07月18日14:47
沢山のファイルを持っていて、それらをあれこれいじっているとする。 それらに変更を加えようと思うのだけど、ひょっとしたら後でまた戻したくなるかもしれない。 バックアップを作ってから作業する。 しかし、そういうことを繰り返していると、どれがいつ作ったものだったかわからなくなってしまい、混乱する。
そのために、リビジョン管理ソフトというものがある。 CVSというソフトがもっとも有名だ。
ここでいうリビジョンというのは一般的にいうバージョンと同じ意味で、要するにリビジョン管理システムというのは、バージョン管理システムのことだ。 だけどここではその「バージョン」のことを「リビジョン」と呼ぶ。 また「リビジョン」という言葉を使う文脈でいう「バージョン」というものは「リビジョン」とは若干意味が異なるらしい。
僕はまったく知らなかったのだけど、リビジョン管理ソフトには、分散式のものがあるらしい。
これについて、調べてみた。
ここにこういう記事があった。
http://en.wikipedia.org/wiki/Revision_control#Distributed_revision_control
これを以下、超訳してみた。
===================================
Distributed revision control (DRCS) takes a peer-to-peer approach, as opposed to the client-server approach of centralized systems. Rather than a single, central repository on which clients synchronize, each peer's working copy of the codebase is a bona-fide repository.[2] Synchronization is conducted by exchanging patches (change-sets) from peer to peer. This results in some important differences from a centralized system:
分散リビジョン管理はP2P方式を採用しており、クライアントサーバー方式を利用してサーバーに情報を集中させる一般的なリビジョン管理システムとは一線を画している。
従来の方式では,リポジトリと呼ばれる正式なリビジョンがたったひとつだけ作られ、それに対してクライアントが同期するが、分散リビジョン管理では、それぞれのクライアントが正式なリビジョンとなる。 そして同期処理はパッチ(チェンジセットと呼ばれる)をそれぞれのクライアント間で交換することによって行う。
* No canonical, reference copy of the codebase exists by default; only working copies.
デフォルトでは、正式版リビジョンは存在せず作業版リビジョンしか用意されない。
* Common operations such as commits, viewing history, and reverting changes are fast, because there is no need to communicate with a central server.[3] Rather, communication is only necessary when pushing or pulling changes to or from other peers.
サーバーと接続する必要が無いため、一般的な処理(コミット・ヒストリ閲覧・復元)は非常に速い。 接続が必要なのは、他のクライアントから変更を受け取ったり逆に伝えたりするときだけ。
* Each working copy is effectively a remote backup of the codebase and change history, providing natural security against data loss
それぞれの作業用リビジョンがリモートバックアップとしても働くため、自然にデータ損失に対してのセキュリティーが高まる。
Open systems
オープン系
An open system of distributed revision control is characterized by its support for independent branches, and its heavy reliance on merge operations. Its general characteristics are:
数あるオープン系のリビジョン管理システムは、それぞれブランチの管理方法とマージ手法が異なり、それぞれを特徴付けている。
* Every working copy is effectively a branch.
作業用リビジョンは全て分岐として扱われる。
* Each branch is actually implemented as a working copy, with merges conducted by ordinary patch exchange, from branch to branch.
それぞれの分岐は、マージ用パッチ交換機能付きの、作業用コピーとして実装される。
* Code forking is therefore easier to accomplish, where desired, because every working copy is a potential fork. (By the same token, undesirable forks are easier to mend because, if the dispute can be resolved, re-merging the code is easy.)
全ての作業用コピーは、可能性として分岐する可能性があるため、この方式なら分岐は非常に簡単である。 間違って作ってしまった分岐も直しやすい。
* It may be possible to "cherry-pick" single changes, selectively pulling them from peer to peer.
それぞれの更新をつまみ食いするように選択できる。
* New peers can freely join, without applying for access to a server.
新しいクライアントは、サーバーに対して一切アクセスすることなく参加できる。
One of the first open systems was BitKeeper, notable for its use in the development of the Linux kernel. A later decision by the makers of BitKeeper to restrict its licensing led the Linux developers on a search for a free replacement[4].
最も早いオープン系実装だったものは BitKeeper である。 これはリナックスの開発に使われた事で有名である。 その後 BitKeeper は使用条件が制限され、リナックス開発者に代替案を探させる結果となっている。
Common open systems now in free use are:
よく利用されるオープン系ソフトは:
* Bazaar;
* Darcs;
* Git, created by Linus Torvalds, influenced by BitKeeper and Monotone, aiming at very high performance, currently used for the Linux Kernel, X.org, and under investigation by KDE;
ライナストーバルスによって作られた。
* Mercurial, started with same aims as Git, currently used by Mozilla project, NetBeans and OpenJDK (as well as other open source Sun projects);
GITと同じ目標を持って作られた。モジラプロジェクトで利用されている。
* Monotone;
* SVK;
* for a full list, see the comparison of revision control software
[edit] Replicated systems
A replicated system of distributed revision control is based on a replicated database. A check-in is equivalent to a distributed commit. Successful commits create a single baseline, which reduces the need for merges. An example of a replicated distributed system is Code Co-op.
===================================
もうひとつみつけた記事 (こちらはあまりたいしたことが書かれていない)
http://en.wikipedia.org/wiki/Distributed_revision_control
GIT
http://en.wikipedia.org/wiki/Git_%28software%29
DARCS
http://en.wikipedia.org/wiki/Darcs
※ GITというのはイギリス英語で「わがままでどうにもならないヤツ」という意味らしい。
※ どうでもいいけど DARCSってラオス語で「ケツ」という意味だ。
※ 何でみんなそういう変な意味ばかりなんだろう。
用語集:
FOLK
http://en.wikipedia.org/wiki/Fork_%28software_development%29
BRANCH
http://en.wikipedia.org/wiki/Branching_%28software%29
リビジョン管理ソフト一覧:
http://en.wikipedia.org/wiki/Comparison_of_revision_control_software
===================================
※ 何で日本語のWIKIに書き込まないのか、と思うかもしれない。 日本語のWIKIって不毛な論争に巻き込まれて莫大な時間を浪費する事が多いので、怖くて近寄れない。
===================================
追記
このライナストーバルスが作ったGitというソフトはデザインが例えようもなく素晴らしい。
ここにその設計方針について説明が書かれている。 とても勉強になる。
http://en.wikipedia.org/wiki/Git_%28software%29
追記2
http://en.wikipedia.org/wiki/Content-addressable_storage
これだよ! これ! 僕が考えていた事とドンピシャのことが書かれてる!
追記3
http://en.wikipedia.org/wiki/Git_%28software%29#Implementation
これ、すごい。 頭にグサっと突き刺さるように、ずばりと核心が書かれてる。
これだ、と思う。
これなら最小限の要素の組み合わせで無限の状態を表現できる。 正に理想。
追記4
でもよく読んでみると、僕が今考えているものとは大幅に設計方針が違うという事がわかった。
とにかくがんばろう。
そのために、リビジョン管理ソフトというものがある。 CVSというソフトがもっとも有名だ。
ここでいうリビジョンというのは一般的にいうバージョンと同じ意味で、要するにリビジョン管理システムというのは、バージョン管理システムのことだ。 だけどここではその「バージョン」のことを「リビジョン」と呼ぶ。 また「リビジョン」という言葉を使う文脈でいう「バージョン」というものは「リビジョン」とは若干意味が異なるらしい。
僕はまったく知らなかったのだけど、リビジョン管理ソフトには、分散式のものがあるらしい。
これについて、調べてみた。
ここにこういう記事があった。
http://en.wikipedia.org/wiki/Revision_control#Distributed_revision_control
これを以下、超訳してみた。
===================================
Distributed revision control (DRCS) takes a peer-to-peer approach, as opposed to the client-server approach of centralized systems. Rather than a single, central repository on which clients synchronize, each peer's working copy of the codebase is a bona-fide repository.[2] Synchronization is conducted by exchanging patches (change-sets) from peer to peer. This results in some important differences from a centralized system:
分散リビジョン管理はP2P方式を採用しており、クライアントサーバー方式を利用してサーバーに情報を集中させる一般的なリビジョン管理システムとは一線を画している。
従来の方式では,リポジトリと呼ばれる正式なリビジョンがたったひとつだけ作られ、それに対してクライアントが同期するが、分散リビジョン管理では、それぞれのクライアントが正式なリビジョンとなる。 そして同期処理はパッチ(チェンジセットと呼ばれる)をそれぞれのクライアント間で交換することによって行う。
* No canonical, reference copy of the codebase exists by default; only working copies.
デフォルトでは、正式版リビジョンは存在せず作業版リビジョンしか用意されない。
* Common operations such as commits, viewing history, and reverting changes are fast, because there is no need to communicate with a central server.[3] Rather, communication is only necessary when pushing or pulling changes to or from other peers.
サーバーと接続する必要が無いため、一般的な処理(コミット・ヒストリ閲覧・復元)は非常に速い。 接続が必要なのは、他のクライアントから変更を受け取ったり逆に伝えたりするときだけ。
* Each working copy is effectively a remote backup of the codebase and change history, providing natural security against data loss
それぞれの作業用リビジョンがリモートバックアップとしても働くため、自然にデータ損失に対してのセキュリティーが高まる。
Open systems
オープン系
An open system of distributed revision control is characterized by its support for independent branches, and its heavy reliance on merge operations. Its general characteristics are:
数あるオープン系のリビジョン管理システムは、それぞれブランチの管理方法とマージ手法が異なり、それぞれを特徴付けている。
* Every working copy is effectively a branch.
作業用リビジョンは全て分岐として扱われる。
* Each branch is actually implemented as a working copy, with merges conducted by ordinary patch exchange, from branch to branch.
それぞれの分岐は、マージ用パッチ交換機能付きの、作業用コピーとして実装される。
* Code forking is therefore easier to accomplish, where desired, because every working copy is a potential fork. (By the same token, undesirable forks are easier to mend because, if the dispute can be resolved, re-merging the code is easy.)
全ての作業用コピーは、可能性として分岐する可能性があるため、この方式なら分岐は非常に簡単である。 間違って作ってしまった分岐も直しやすい。
* It may be possible to "cherry-pick" single changes, selectively pulling them from peer to peer.
それぞれの更新をつまみ食いするように選択できる。
* New peers can freely join, without applying for access to a server.
新しいクライアントは、サーバーに対して一切アクセスすることなく参加できる。
One of the first open systems was BitKeeper, notable for its use in the development of the Linux kernel. A later decision by the makers of BitKeeper to restrict its licensing led the Linux developers on a search for a free replacement[4].
最も早いオープン系実装だったものは BitKeeper である。 これはリナックスの開発に使われた事で有名である。 その後 BitKeeper は使用条件が制限され、リナックス開発者に代替案を探させる結果となっている。
Common open systems now in free use are:
よく利用されるオープン系ソフトは:
* Bazaar;
* Darcs;
* Git, created by Linus Torvalds, influenced by BitKeeper and Monotone, aiming at very high performance, currently used for the Linux Kernel, X.org, and under investigation by KDE;
ライナストーバルスによって作られた。
* Mercurial, started with same aims as Git, currently used by Mozilla project, NetBeans and OpenJDK (as well as other open source Sun projects);
GITと同じ目標を持って作られた。モジラプロジェクトで利用されている。
* Monotone;
* SVK;
* for a full list, see the comparison of revision control software
[edit] Replicated systems
A replicated system of distributed revision control is based on a replicated database. A check-in is equivalent to a distributed commit. Successful commits create a single baseline, which reduces the need for merges. An example of a replicated distributed system is Code Co-op.
===================================
もうひとつみつけた記事 (こちらはあまりたいしたことが書かれていない)
http://en.wikipedia.org/wiki/Distributed_revision_control
GIT
http://en.wikipedia.org/wiki/Git_%28software%29
DARCS
http://en.wikipedia.org/wiki/Darcs
※ GITというのはイギリス英語で「わがままでどうにもならないヤツ」という意味らしい。
※ どうでもいいけど DARCSってラオス語で「ケツ」という意味だ。
※ 何でみんなそういう変な意味ばかりなんだろう。
用語集:
FOLK
http://en.wikipedia.org/wiki/Fork_%28software_development%29
BRANCH
http://en.wikipedia.org/wiki/Branching_%28software%29
リビジョン管理ソフト一覧:
http://en.wikipedia.org/wiki/Comparison_of_revision_control_software
===================================
※ 何で日本語のWIKIに書き込まないのか、と思うかもしれない。 日本語のWIKIって不毛な論争に巻き込まれて莫大な時間を浪費する事が多いので、怖くて近寄れない。
===================================
追記
このライナストーバルスが作ったGitというソフトはデザインが例えようもなく素晴らしい。
ここにその設計方針について説明が書かれている。 とても勉強になる。
http://en.wikipedia.org/wiki/Git_%28software%29
追記2
http://en.wikipedia.org/wiki/Content-addressable_storage
これだよ! これ! 僕が考えていた事とドンピシャのことが書かれてる!
追記3
http://en.wikipedia.org/wiki/Git_%28software%29#Implementation
これ、すごい。 頭にグサっと突き刺さるように、ずばりと核心が書かれてる。
これだ、と思う。
これなら最小限の要素の組み合わせで無限の状態を表現できる。 正に理想。
追記4
でもよく読んでみると、僕が今考えているものとは大幅に設計方針が違うという事がわかった。
とにかくがんばろう。
コメント一覧
おかあつ 2009年07月18日 15:43
そうかぁ...今日から日本は三連休なのか。
ここは毎日休日というか、毎日仕事というか...
ここは毎日休日というか、毎日仕事というか...
おかあつ 2009年07月18日 16:32
メモ therefore と thereby って違うんだ...
thereby adverb
(formal) used to introduce the result of the action or situation mentioned:Regular exercise strengthens the heart, thereby reducing the risk of heart attack.
therefore adverb
used to introduce the logical result of sth that has just been mentioned:He’s only 17 and therefore not eligible to vote. There is still much to discuss. We shall, therefore, return to this item at our next meeting.
thereby adverb
(formal) used to introduce the result of the action or situation mentioned:Regular exercise strengthens the heart, thereby reducing the risk of heart attack.
therefore adverb
used to introduce the logical result of sth that has just been mentioned:He’s only 17 and therefore not eligible to vote. There is still much to discuss. We shall, therefore, return to this item at our next meeting.
おかあつ 2009年07月18日 17:14
3way-merge
http://en.wikipedia.org/wiki/3-way_merge#Three-way_merge
3ウェイマージに対応したリビジョン管理ソフトを実際に業務で使った事がある人、いますか?
http://en.wikipedia.org/wiki/3-way_merge#Three-way_merge
3ウェイマージに対応したリビジョン管理ソフトを実際に業務で使った事がある人、いますか?
おかあつ 2009年07月19日 03:02
わかりやすい日本語のドキュメントがあった。
https://www.ibm.com/developerworks/jp/linux/library/l-git/
https://www.ibm.com/developerworks/jp/linux/library/l-git/