4

Windows ユーザーとして、フォルダーの階層を持つ 1 つの svn リポジトリを作成しました。一番下のノードには、svn 標準レイアウトが含まれています。

ProjectA/
    ApplicationOne/
        ModuleX/
            trunk/
            branches/
            tags/
    ApplicationTwo/
        ModuleY/
            trunk/
            branches/
            tags/

...など無限に続きます。リポジトリには現在、トランク/ブランチ/タグ構造を持つ約 100 以上の実際の svn プロジェクトが含まれていますが、トップレベルにはほとんどありません。

これを処理するためにsubgitをどのように設定しますか?

4

1 に答える 1

8

SubGitは、ローカル ミラー モードとリモート ミラー モードの 2 つの異なるモードで動作します。以下に、これらのモードの一般的な概要と、特定のケースに対するいくつかの推奨事項を示します。

  • ローカル ミラー モード

    このモードでは、Subversion と Git の両方のリポジトリが同じホストに存在するため、SubGit は SVN 側と Git 側の両方にローカル アクセスできます。

    以下に、基本的な手順を示します。詳細なドキュメントとよくある落とし穴については、SubGit 'Local Mode' Bookを参照してください。

    1. 構成

      subgit configure <SVN_REPO>
      SubGit version <VERSION> build #<BUILD_NUMBER>
      
      Detecting paths eligible for translation... done.
      Subversion to Git mapping has been configured:
        /ProjectA/ApplicationOne/ModuleX : <SVN_REPO>/git/ProjectA/ApplicationOne/ModuleX.git
        /ProjectA/ApplicationTwo/ModuleY : <SVN_REPO>/git/ProjectA/ApplicationTwo/ModuleY.git
        ...
      
      CONFIGURATION SUCCESSFUL
      ...
      

      このコマンドは、リポジトリ レイアウトを自動検出し、 に構成ファイルを生成しようとします<SVN_REPO>/conf/subgit.conf。あなたのような大きな Subversion リポジトリの場合、時間がかかる場合があります。

      自動生成された構成ファイルが次のようになっていることを確認し、必要に応じて調整してください。

      ...
      [git "ProjectA/ApplicationOne/ModuleX"]
        translationRoot = /ProjectA/ApplicationOne/ModuleX
        repository = git//ProjectA/ApplicationOne/ModuleX.git
        pathEncoding = UTF-8
        trunk = trunk:refs/heads/master
        branches = branches/*:refs/heads/*
        shelves = shelves/*:refs/shelves/*
        tags = tags/*:refs/tags/*
      ...
      
    2. 著者のマッピング

      この段階で、既存の SVN ユーザー名を Git 作成者にマップする /conf/authors.txt ファイルを作成する必要があります。詳細については、ドキュメントを参照してください。

    3. インストール

      最後に、Subversion リポジトリを Git にインポートし、subgit installコマンドを実行して同期を有効にする必要があります。

      subgit install repo
      SubGit version <VERSION> build #<BUILD_NUMBER>
      
      Subversion to Git mapping has been found:
        /ProjectA/ApplicationOne/ModuleX : <SVN_REPO>/git/ProjectA/ApplicationOne/ModuleX.git
        /ProjectA/ApplicationTwo/ModuleY : <SVN_REPO>/git/ProjectA/ApplicationTwo/ModuleY.git
        ...
      
      Processing '/ProjectA/ApplicationOne/ModuleX'
        Translating Subversion revisions to Git commits...
      Processing '/ProjectA/ApplicationTwo/ModuleY'
        Translating Subversion revisions to Git commits...
        ...
      
        Subversion revisions translated: <REVISIONS_NUMBER>.
        Total time: <TIME_SPENT> seconds.
      
      INSTALLATION SUCCESSFUL
      
    4. Git サーバー

      インストールが完了し、Subversion と Git リポジトリ間の同期が有効になったら、Git サーバーをセットアップする (または既存の Apache HTTP サーバーを再利用する) ことができます。これに関するドキュメントを参照し、ブログでこのトピックに関するいくつかの投稿を参照してください。


  • リモート ミラー モード

    このモードを使用する場合、SubGit を Git リポジトリにのみインストールし、このリポジトリを別のマシンでホストされているリモート Subversion サーバーと同期させる必要があります。

    以下に、いくつかの基本的な手順を示します。詳細については、SubGit 'Remote Mode' Bookを参照してください。

    1. 構成

      リモート ミラー モードでは、SubGit はリポジトリ レイアウトを自動検出しようとしないため、subgit configure --svn-url <SVN_URL>Subversion リポジトリ内のすべてのモジュールに対してコマンドを実行する必要があります。

      subgit configure --svn-url <SVN_ROOT_URL>/ProjectA/ApplicationOne/ModuleX <GIT_ROOT_DIR>/ProjectA/ApplicationOne/ModuleX.git
      SubGit version <VERSION> build #<BUILD_NUMBER>
      
      Configuring writable Git mirror of remote Subversion repository:
        Subversion repository URL : <SVN_ROOT_URL>/ProjectA/ApplicationOne/ModuleX
        Git repository location   : <GIT_ROOT_DIR>/ProjectA/ApplicationOne/ModuleX.git
      
      CONFIGURATION SUCCESSFUL
      ...
      

      その結果、SubGit<GIT_REPO>/subgit/configはすべての Git リポジトリの構成ファイルを生成します。あなたの場合、この構成ファイルは次のようになります。

      ...
      [svn]
        url = <SVN_ROOT_URL>/ProjectA/ApplicationOne/ModuleX
        trunk = trunk:refs/heads/master
        branches = branches/*:refs/heads/*
        tags = tags/*:refs/tags/*
        shelves = shelves/*:refs/shelves/*
        fetchInterval = 60
        connectTimeout = 30
        readTimeout = 60
        keepGitCommitTime = false
        auth = default
      
      [auth "default"]
        passwords = subgit/passwd
        useDefaultSubversionConfigurationDirectory = false
        subversionConfigurationDirectory = <SVN_CONFIG_DIR>
      ...
      
    2. 著者のマッピング

      この段階で、既存の SVN ユーザー名を Git 作成者にマップする /subgit/authors.txt ファイルを作成する必要があります。詳細については、ドキュメントを参照してください。

    3. SVN 資格情報

      file://プロトコルを使用していない場合は、必要な資格情報を提供する必要があるため、SubGit は Subversion サーバーに対して認証できます。詳細については、SubGit Book の対応する章をお読みください。

      また、Subversion 側でフックを有効にすることをお勧めします。pre-revprop-changeこれにより、インストールとメンテナンスが少し簡単になります。 SubGit Bookを参照してください。

    4. インストール

      最後に、Subversion リポジトリを Git にインポートし、subgit installコマンドを実行して同期を有効にする必要があります。

      subgit install git
      SubGit version <VERSION> build #<BUILD_NUMBER>
      
      Translating Subversion revisions to Git commits...
      
        Subversion revisions translated: <REVISIONS_NUMBER>.
        Total time: <TIME_SPENT> seconds.
      
      INSTALLATION SUCCESSFUL
      

      このコマンドは、SVN サーバーをポーリングし、新しいリビジョンがそこに表示されたときに取得するバックグラウンド プロセスも起動します。基本的に、これは SubGit がすべての Git リポジトリに対して専用のプロセスを使用することを意味します。そのようなプロセスの実行を避け、代わりに何らかのジョブ スケジューラを使用することが理にかなっている場合があります。

    5. Git サーバー

      上記のリンクは、リモート モードにも関連しています。

      ただし、Git ホスティングにAtlassian Stashを使用する場合は、SubGit エンジンに基づくSVN Mirror Pluginを使用でき、UI とメンテナンスに関してより優れたエクスペリエンスを提供します。

私たちの経験に基づいた次のガイドラインがあります。

  1. 多くの独立した Subversion リポジトリの場合、ローカル ミラー モードで SubGit を使用することをお勧めします。これは、SVN ポーリングやそのための追加プロセスの維持が不要だからです。

  2. 多くのモジュールを含む 1 つの巨大な Subversion リポジトリの場合は、file://プロトコルでリモート ミラー モードを使用し、基本設定を少し調整することをお勧めします。

    あなたのケースで 100 以上のバックグラウンド プロセスを実行することは間違いなく意味がありません。代わりに、特定のリビジョンによって変更された特定のモジュールをチェックし、対応する Git リポジトリの同期をトリガーする追加のコミット後の SVN フックをインストールすることをお勧めします。

他にご不明な点がございましたら、こちらの Stack Overflowまたは問題トラッカーでお気軽にお問い合わせいただくか、 support@subgit.com までメールでお問い合わせください。

于 2013-11-25T16:05:05.763 に答える