23

Assembla を使用して Subversion リポジトリを管理しています。コードベースの主要なリビジョンをいくつか開始し、最新の本番リビジョンのタグを作成したいと考えています (数週間前にそのリビジョンを本番環境にプッシュしたときに忘れていました)。

現在リビジョン 588 を使用しており、リビジョン 577 のタグを作成したいと考えています。Assembla 内で Subversion を使用してコマンド ラインからこれを行うにはどうすればよいですか?

私の Assembla SVN URL がhttps://subversion.assembla.com/svn/my_assembla_svn_directory/であるとします。

4

2 に答える 2

52

パラメータを使用-rして、特定のリビジョンを参照できます。その際、@revリビジョンの固定を使用して、特定のリビジョンで Subversion リビジョンのレイアウトを参照していることを確認することもできます。以下は、リビジョン 577 のトランクからタグを作成し、このタグを呼び出しますREV-1.2

$ svn cp -r 577 https://subversion.assembla.com/svn/my_assembla_svn_directory/trunk
    https://subversion.assembla.com/svn/my_assembla_svn_directory/tags/REV-1.2

trunkbranches、およびディレクトリがない場合はtags、作成するために作業を移動する必要があります。

$ # Move the current directory to the "trunk"
$ svn cp https://subversion.assembla.com/svn/my_assembla_svn_directory \
    https://subversion.assembla.com/svn/my_assembla_svn_directory/trunk

$ # Make a corresponding tags and branches directories too
$ svn mkdir https://subversion.assembla.com/svn/my_assembla_svn_directory/branches
$ svn mkdir https://subversion.assembla.com/svn/my_assembla_svn_directory/tags

$ # Now, we can delete the old location. Let your developers know this,
$ # so they're not surprised by this and will be able to do a "svn relocate"
$ svn delete https://subversion.assembla.com/svn/my_assembla_svn_directory/

$ # Whoops. I should have done the tagging when I had a chance. 
$ #Oh well, we'll use the `@rev` pinning:

$ svn -r557 cp https://subversion.assembla.com/svn/my_assembla_svn_directory@557 \
      https://subversion.assembla.com/svn/my_assembla_svn_directory/tags/REL-1.2

Subversion は、コピーを除いて、タグ付け分岐を実装していません。これは珍しいことではありません。Perforce は同じ方法で分岐を実装します。実際、慣れると非常にうまく機能します。

  • 有効なブランチとタグを簡単に確認できます (svn ls正しいディレクトリで a を実行するだけです)。
  • タグとブランチの完全な履歴は簡単に確認できます。誰が、いつ、なぜ変更したかなどを確認できます。
  • タグまたはブランチの完全な履歴が表示されます。誰かがタグやブランチを変更した場合、誰がそれを行ったかが非常に明確にわかります。
  • 開発者がさまざまなブランチやトランクから何を分岐またはタグ付けするかを選択するときに、他の多くのバージョン管理システムで見られる複雑なタイプの分岐を思いとどまらせます。これにより、履歴の追跡が非常に困難になります。Subversion のスキームでは、ブランチとタグがプロジェクト内のすべてのファイルに影響を与えると考えることが推奨されます。
于 2012-06-22T19:35:59.867 に答える
7

SVNドキュメントから直接:

/calc/trunk のスナップショットを HEAD リビジョンとまったく同じように作成したい場合は、そのコピーを作成します。

$ svn copy http://svn.example.com/repos/calc/trunk \
           http://svn.example.com/repos/calc/tags/release-1.0 \
           -m "Tagging the 1.0 release of the 'calc' project."

Committed revision 902.

この例では、/calc/tags ディレクトリが既に存在することを前提としています。(そうでない場合は、svn mkdir を使用して作成できます。) コピーが完了すると、新しい release-1.0 ディレクトリは、コピーを作成した時点で /trunk ディレクトリが HEAD リビジョンでどのように見えたかのスナップショットになります。もちろん、あなたが見ていなかったときに他の誰かがプロジェクトに変更をコミットした可能性がある場合に備えて、どのリビジョンをコピーするかについてより正確にしたいかもしれません. したがって、/calc/trunk のリビジョン 901 が必要なスナップショットであることがわかっている場合は、 -r 901 を svn copy コマンドに渡すことで指定できます

(私のものを強調)

于 2012-06-22T19:04:08.473 に答える