2

今日、私の職場では、管理アクセス権を持たない公開 svn リポジトリでソース コードをホストしています。ここで、git (github) を使用してソースをホストします。いくつかの内部的な理由により、使用する svn リポジトリは git リポジトリをミラーリングする必要があります。

svn <-> git は非常にスムーズでストレスフリーであるため (私のテストによると実際にそうであるように思われます)、Subgit がこの作業を行うのに最適なツールであるようです。だから、私が行ってきたレイアウトはこれです:

svn-repo <- subgit-repo <- github <-> 各開発者からのローカル git-repo。

svn-repo は読み取り専用になります。つまり、git を使用してのみコミットできます。

Subgitブログを読んで、この投稿を見ました。この投稿では、svnsync を使用して subgit-repo を svn-repo と同期しますが、同期は svn-repo から subgit-repo への一方向のみです:(

そのため、svnadmin ダンプとロードを発見し、それらを使用して svn-repo と subgit-repo の同期を維持できます。例えば:

svnadmin ダンプ --incremental subgit-repo | svnadmin load svn-repo

私の質問は: svnadmin dump と load を使用してリポジトリの同期を維持することは良い考えですか?

ありがとう!

4

1 に答える 1

2

問題を次のように分割しましょう。

  • Subversion リポジトリのリモート同期。
  • Git リポジトリの同期 (そのうちの 1 つが GitHub でホストされている場合)。

Subversion リポジトリのリモート同期。

  1. svnsync を使用します。

    そのため、svnadmin のダンプとロードを発見し、それらを使用して svn-repo を subgit-repo と同期させることができます。

    svnadmin ダンプ --incremental subgit-repo | svnadmin load svn-repo

    svnadmin load svn-repo残念ながら、svn-repo への管理者アクセス権がないと実行できません。しかし、代わりに svnsync を使用することができます:

    $ svnsync init svn-repo subgit-svn-repo
    $ svnsync sync svn-repo
    

    このようにして、subgit-svn-repo から svn-repo への変更をリモートで同期します。あなたの質問では、svn-repo から subgit-svn-repo に同期する方法を指摘していることに注意してください。ただし、私の例では、これが反対方向にも機能することを示しました。

    ただし、このアプローチには 1 つの問題がありますpre-revprop-change。svn-repo にフックが必要です。つまり、フックを有効にするにはローカルで svn-repo にアクセスする必要があります。幸いなことに、管理者がそのようなフックを有効にする場合、これはよくあるケースです。それがあなたにも当てはまることを願っています。

    詳細な HOW-TO は、このブログ投稿にあります。

  2. SubGit 2.0を使用します。

    現在、異なるホストにある Subversion および Git リポジトリの読み取り/書き込みミラーを有効にする SubGit 2.0 の実用的なプロトタイプがあります。Git リポジトリへの管理者アクセスのみが必要なので、Subversion リポジトリを変更する必要はありません。

    現在、次のように機能します。

    $ git init --bare git-repo
    $ subgit configure --svn-url svn-repo git-repo
    $ subgit install git-repo
    

    この時点で、SubGit は git-repo をインストールpre-receiveしてpost-receiveフックし、受信した変更をリモートの svn-repo と自動的に同期します。

    この機能を備えた最初の EAP ビルドを公開する日が近づいています。また、準備ができたらすぐにビルドをテストすることをお勧めします。その瞬間svnsyncまで、私の知る限り、唯一の選択肢があります。

GitHub との Git 同期

あなたの質問から、subgit-git-repo の変更を github-repo とどのように同期するのかはまだ明確ではありません。

subgit-svn-repo と同期するには、変更を subgit-git-repo にプッシュする必要があることに注意してください。

基本的に、チームは github リポジトリのみで作業し、誰かがすべての変更を SubGit 制御の Git リポジトリに手動でプッシュします。

$ git remote add github github-repo
$ git remote add subgit subgit-git-repo
$ git pull github
$ git push subgit

または、変更を定期的に SubGit にプッシュするように cron ジョブをセットアップすることもできます。

于 2012-10-26T20:35:21.390 に答える