6

同じプロジェクトに複数のリポジトリを持つことは可能ですか?

私は現在、自宅の外付けハードディスクのリポジトリで TortoiseSVN で SVN を使用していますが、バックアップに関するソリューションに関しても、これは理想的ではありません。

したがって、私が考えているのは、unfuddleでアカウントを作成し、そこに (リモート バックアップ ソリューションの場合でも) コミットできる場所への2 つ目の(私のホーム リポジトリが最初の) リポジトリを持つことです。

もちろん、コードの整合性が必要であり、2 つ (またはそれ以上) のリポジトリ間で不一致が発生することは望ましくありません。つまり、コードをコミットするときに、両方のリポジトリを両方とも更新する必要があります。

では、これを実現するにはどうすればよいでしょうか。

私が考えていることは、プライマリ リポジトリ (ホーム リポジトリ) にコミットしてから、自動的にオンライン リポジトリ (unfuddle リポジトリ) に自動的にコミットすることです (もちろん、毎回手動で両方のリポジトリにコミットしたくないためです)。私のコードをコミットします)

これは可能ですか?

4

3 に答える 3

5

すべてが可能です:)

編集:急いで品質につながることはなく、質問のすべてのWindows参照が欠落している私の答えもありませんでした。ここでは、Windows で同期を機能させる方法について説明します。

この場合、2 台のマシンがあります。

  • マシン A: リポジトリが現在実行されている場所。
  • マシン B: 同期先。

A から同期したい B に新しいリポジトリを作成します。このリポジトリが空である (rev0 で実行されている) ことは非常に重要です。

B で、新しく作成されたリポジトリの SVN フォルダーで、/hooks を参照し、次の BAT ファイルを作成します。

start-commit.bat

IF "%2" == "someusername" (goto :label1) else (echo "Only the someusername account may commit new revisions" >&2 )

exit 1
goto :eof

:label1
exit 0

pre-revprop-change.bat

IF "%3" == "someuser" (goto :label1) else (echo "Only the someuser user may change revision properties" >&2 )

exit 1
goto :eof

:label1
exit 0

someuserマシン A のリポジトリに存在する syncuser であり、マシン B のリポジトリで権限を持つ唯一のユーザーです。マシン B のリポジトリに対して手動でコミットを行わないことが非常に重要です。

/hooksマシン A のリポジトリのフォルダー内

post-commit.bat

CD PATH_TO_SUBVERSION\bin
svnsync sync svn://machineB/repos --non-interactive --no-auth-cache --source-username machineAusername --source-password machineApassword --sync-username machineBusername --sync-password machineBpassword

これらのバッチ ファイルが配置されたら、B のリポジトリに同期するように指示する必要があります。

svnsync initialize svn://マシンB/repos svn://マシンA/repos --non-interactive --no-auth-cache --source-username マシンAユーザー名 マシンAパスワード マシンバスユーザー名 --source-password マシン --sync-username B --sync-password パスワード

次のようなものが返されます。Copied properties for revision 0.

これで、マシン A のリポジトリにコミットするたびに、マシン B のリポジトリにコピーされます。

Google Codeまたは別のオンライン リポジトリに同期する場合は、trunk/branches/tags 構造をリビジョン 1 にコミットすることに注意することが非常に重要です。これらのサード パーティのリポジトリを使用する場合は、それらに連絡してリポジトリをリセットする必要があります。同期リポジトリとしての場所。

当然のことながら、 http: //www.svnforum.org/2017/viewtopic.php?t=5745&sid=06551a22d9c0b5780cf1faab6b0e8ce9 から pre-revprop-change.bat と start-commit.bat をコピーしました。

これを自分でテストリポジトリに実装したところ、魅力的に機能するようです。svnsync は私の頭蓋骨の奥深くに沈んでしまいましたが、この質問に気づいてよかったです。仕事でsvnをセットアップするときにセットアップするつもりでした。だから、明日の仕事で最初に何をするかはわかっています。ありがとうございます!

編集2:

私のように、大量のリポジトリを持っている場合、この一般的な post-commit.bat が魅力的です。

SET REPOS=%1
SET REV=%2
SET REPOS=%REPOS:D:\SVN=%

CD "C:\Program Files\Subversion\bin"

svnsync sync svn://machineB/%REPOS%-sync --non-interactive --no-auth-cache --source-username usernameA --source-password passwordA --sync-username usernameB --sync-password passwordB

これにより、リポジトリ名がキャッチされ、それを使用して同期 URL が動的に決定されます。-syncわかりやすくするために、マシン B のすべての同期リポジトリに接尾辞を付けました。この汎用 BAT ファイルはmachineAD:\SVNの svnserve ルートの /hooks に配置する必要がありますが、ビットはmachineBの svnserve ルートです。

于 2009-03-05T20:12:03.343 に答える
-1

純粋な SVN の観点から言えば、作業フォルダー内の 1 つのリポジトリのみを指す .svn フォルダーを 1 つだけ持つことができます。

svn リポジトリで post-commit-hooks を使用して、両方のリポジトリの同期を試みることができます。

あなたが説明している問題は、GIT のような分散バージョン管理システムです。これにより、ローカルでコミットしたり、リモート リポジトリにプッシュしたりできます。

必要に応じて、GIT をローカルで使用し、SVN をリモート リポジトリとして使用することもできます。

  • ツールについてはGITを参照してください
  • 無料のパブリック ホスティングについてはGitHubを参照してください
于 2009-03-05T21:04:45.727 に答える