私がよく知っているほとんどのバージョン管理ツール [*] と、すべての最新ツール (CVS、SVN、git、Mercurial、Bazaar) には、ディレクトリ ツリーに何らかの「マーカー」があります。
たとえば、ファイルをバージョン管理する場合/a/b/c/file.txt
は、ツリーのあるレベルでリポジトリを確立します。
/a/b/.bzr
/a/b/.git
/a/b/.hg
/a/b/CVS
ほとんどの DVCS は、実際にはこの「マーカー」にバージョン履歴を保存します。CVS にはありません。代わりに、CVS ディレクトリには、実際のリポジトリにアクセスする方法を示すファイルが含まれています (基本的にはリンクですが、シンボリック リンクやハードリンクではありません)。さらに CVS は、作業ツリーのすべてのサブディレクトリにリンク「CVS」ディレクトリを配置し、そのディレクトリをリポジトリ内のその位置にリンクします。(必ずしも同じとは限りません。)
Q: ファイルシステムにそのようなリンクやマーカーを必要としない最新の DVCS ツールはありますか?
たとえば、バージョン管理下のファイルは
/a/b/c/file.txt
しかし、リポジトリは
/x/y/z/repo/.DVCS-TOOL/{a/b/c/file.txt}
{a/b/c/file.txt} の部分は必ずしもディレクトリ パスではなく、データベースのエントリである可能性があります。
そのため、リポジトリ内から次のようなことができます。
> cd /x/y/z/repo
> DVCS-TOOL add /a/b/c/file.text
Warning: /a/b/c/file.txt is not under the repository /x/y/z.
Are you sure that you want to add such an outside-repository file? [y/n] y
Absolute or relative path? [ar] a
> DVCS-TOOL ci
/a/b/c/file.text --ci--> /x/y/z/repo/.DVCS-TOOL/{a/b/c/file.txt}
> rm /a/b/c/file.txt
> DVCS-TOOL status
Missing /a/b/c/file.text --in-repo-as--> /x/y/z/repo/.DVCS-TOOL/{a/b/c/file.txt}
> DVCS-TOOL revert
/a/b/c/file.text <--reverted-from-- /x/y/z/repo/.DVCS-TOOL/{a/b/c/file.txt}
> echo 'stuff' >> /a/b/c/file.txt
> DVCS-TOOL ci
/a/b/c/file.text --ci--> /x/y/z/repo/.DVCS-TOOL/{a/b/c/file.txt}
リポジトリの外から、次のようにすることができます。
> cd /a/b/c
> echo 'more stuff' >> file.txt
> DVCS-TOOL -repo /x/y/z/repo ci
/a/b/c/file.text --ci--> /x/y/z/repo/.DVCS-TOOL/{a/b/c/file.txt}
動機:
Linux、Cygwin、Windows のいずれであっても、ホーム ディレクトリとシステムに加えたその他の変更をバージョン管理しています。
確かに、私は cygwin を管理できるので、元のファイルに加えて、 や などの/
ファイルに加えた変更をチェックインできます。たとえば、 を作成できます。(多くの場合、ディストリビューションを取得できることに依存して、ツリー全体ではなく、変更した特定のファイルのみをチェックインします。)/etc/bash.bashrc
/usr/local/etc/foo.rc
/.bzr
さらに、私が所有している、またはルートを持っている UNIX / Linux システムでこれを行うことができます。
しかし、への書き込みアクセス権がなく/
、/usr/etc/foo/bar
and /etc/baz/bif
... を実行し、2 つの個別のリポジトリを持ちたくないが、代わりに「スパース リポジトリ」が必要な場合。
/cygwin
または、いつでも
爆破できるようにしたいが、 から/a/b/my-repo/{cygwin/etc/bash.bashrc}
へ/cygwin/etc/bash.bashrc
(そして、おそらく/etc/bash.bashrc
他のシステムでは へ )への便利なマッピングが必要な場合。
または、今日遭遇した Windows の例: 次のようなファイルをバージョン管理したい
C:\Users\[USERNAME]\AppData\Roaming\Adobe\FrameMaker\11\Maker.ini
または、cygwin パス
/cygdrive/c/Users/glew/AppData/Roaming/Adobe/FrameMaker/7.2/maker.ini
しかし、C:.hg または C:\Users\glew.hg または ... にリポジトリを作成したくありません。
1つのレポ、および/またはそのレポに基づいた、またはリンクされたワークスペース、および実際にはレポ/ワークスペースの下にないターゲットファイルを処理する方法を知っているコマンドが必要です。
Q: これを行う最新の DVCS ツールをご存知ですか?
Q: もしそうなら、どのように?
たとえば、bzr ではワークスペースがリポジトリを共有できることを漠然と知っていますが、私の知る限り、ワークスペースをリポジトリにリンクする /a/b/workspace/.bzr ファイルが必要です。だから、「Bazaar を見て」以上の詳細が必要になります。
たとえば、hg に --repository オプションがあることは知っています。しかし、それは私が望むことをしません:
> cd /tmp
> mkdir tmp1; cd tmp1
./tmp1
> hg init
> cd ..
> mkdir tmp2; cd tmp2
./tmp2
> bar.txt
> hg --repository ../tmp1 add bar.txt
abort: bar.txt not under root '/tmp/tmp1'
注 *: 「私がよく知っているほとんどのバージョン管理ツールと最新のツールのすべて...」と言う理由は、「ボックス、リンク、および並列ツリー: 構成管理の要素」で説明されているツールがシステム。" ソフトウェア管理会議のワークショップ議事録。1989年。
といった特徴があります。というか、そういう特徴がありました。
恥ずかしいことに、私は著者です。しかし、いいえ、本当は、私は自我満足のためにこの質問をしたのではありません。この質問を書き始めたとき、私はこの論文を忘れていました。
さらに、このホワイト ペーパーで説明されているツールは古く、何年も前に雇用主に置き忘れられて久しいものです。そして確かに最新の DVCS ではありません。
はい、知っています。Brian Berliner が CVS 論文で私の論文を否定しています。彼は間違っていて、私は正しいが、それは別の問題だ。(ブライアンはライブロックの可能性に満足していますが、私はそうではありません。)
とにかく、リポジトリとリポジトリ外のファイルとの間のマッピングというこの非常に古い概念が、最新の DVCS ツールで再浮上することを願っています。上記のように使いたいからです。