インプレース編集、バージョン管理-ソリューションは何ですか?
-
03-07-2019 - |
質問
私は開発タスクにSVNを使用していますが、RCSで管理されている多くのファイルがあります。プライベートSVNリポジトリの作業コピーで編集するのは合理的ではないようです所定の位置に)。また、SVNの管理下に置くファイルがある場所にリポジトリの作業用コピーを置くことは合理的ではないようです。そのため、代わりにRCSを使用します。
理想的には移動したり、その場で編集およびテストしたりしないファイルを管理するためのアプローチは何ですか?
より正確に言うと、同等のものが欲しい
- 書き込み保護されたfile.txtを持っている
- " co -l file.txt"のようなコマンド(RCS)編集可能にする
- その場で編集してすぐにテストする機能
- " ci -u file.txt"のようなコマンド(RCS)変更を記録し、コメントを追加して、再び読み取り専用にします
- 他のユーザーも同じ場所でこれを行うことができるはずです
- ただし、バージョン情報は別のサーバー上の安全な場所(おそらくsvn担当者)に移動する必要があります
解決
Ext3cow などの書き込みファイルシステム(CoW)でコピーを使用します(免責事項、私はその貢献者の1人です) )多くのものを管理する。例えば:
- スナップショットを使用して、種類に関係なくリポジトリ全体をロールバックします。たとえば、gitツリーを完全に台無しにした場合、cp -dpfR ./@123456789 ./を実行できます。これにより、作業中のレポが123456789のエポックのときと同じようにファイルに置き換えられます。
- バージョニング/スナップショットを独自の不変のVCSとして使用し、/ etcなどに最適です。過去のファイルは削除または変更できないため、各スナップショットは、単一のファイルまたはツリー全体の不変のリビジョンです。
通常、分散VCSを好むため、SubversionではなくGitまたはMercurialを使用しますが、現在はリポジトリをバージョン管理FSにローカルに保持することを主張しています。
Windowsユーザーの場合、同じものがpythonで完全に実行される移植可能な実装がいくつかあると思いますが、確かではありません。
他のヒント
前述のように、gitやMercurialなどのDVCSを使用する必要があるものにSVNを使用する場合。
誰でも独自のリポジトリを作成し、それをmaisセントラルリポジトリ(SVNリポジトリなど)と同期できます。
これは実際に自分のプロジェクトで使用しているものです。
私が取得できなかったのは、ロックが必要な理由だけです。ファイルは読み取り専用である必要はありません。 SVNがマージする方法のために、おそらくあなたはそのように考えています(ほとんどの場合、手作業でマージする必要があります)。 Gitは本当に魔法を使います[1]。マージの大部分は人間の介入なしで行われます。
[1]わかりました、魔法ではありません。 SVNはファイルを重視しますが、Gitはコードのチャンクを重視します。この方法では、まったく同じコードチャンクを変更しない限り、2回変更されたファイルを同時にマージできます。
Git、Mercurial、Bazaarなどの最新の分散バージョン管理システムは、このような状況で最適なツールです。分散された側面(ここでは明らかに重要ではない)のためではなく、その場でリポジトリを作成するのは非常に簡単だからです。
Mercurialでは、次の操作を行うだけです。
cd ~/directory
hg init
Gitの場合も同様です:
cd ~/directory
git init
git add .
すべての作業コピーは完全なリポジトリであり、必要に応じてバックアップとしてリモートサーバーにプッシュできます。さらに、すべてのリポジトリデータは単一の隠しディレクトリに保存されるため、場所中に大量の .svn
ディレクトリがあるという問題を回避できます。
Mercurialを使用してサーバー上の / etc
を管理していますが、非常に便利です。注意すべきことの1つは、ファイルを読み取り専用(RCSなど)にマークしないことですが、これは利点だと思います。
SVNリポジトリが無料であることを認識する必要があります。いくつでも作成できます。
また、リポジトリ全体をチェックアウトする必要がないことを認識する必要があります。あなたは言った:
また、合理的ではないようです リポジトリの作業コピーを持っている 配置するファイルがある場所 SVN制御
あなたが本当に何をしようとしているのかわかりませんが、SVNを独特の方法で使用しているという印象を受けています。