回答:
Subversionでの分岐は、非常に軽量で効率的なコピー機能によって促進されます。
分岐とタグ付けは実質的に同じです。svn copy
コマンドを使用して、リポジトリ内のフォルダ全体をリポジトリ内の別の場所にコピーするだけです。
基本的に、これは慣例により、フォルダのコピーが意味することを意味します-バックアップ、タグ、ブランチなど何でもかまいません。物事についてどのように考えたいかに応じて(通常、過去に使用したSCMツールに応じて)、スタイルをサポートするためにリポジトリ内にフォルダ構造を設定する必要があります。
一般的なスタイルと呼ばれるリポジトリの上部にあるフォルダの束を持っているtags
、branches
、trunk
あなたはあなたの全体のコピーを可能にする-などtrunk
の中に(またはサブセット)tags
および/またはbranches
フォルダ。複数のプロジェクトがある場合は、各プロジェクトでこの種の構造を複製することができます。
コンセプトに慣れるまで少し時間がかかる場合がありますが、機能します。使用する規則について、自分(およびチーム)が明確になっていることを確認してください。また、適切な命名規則(ブランチ/タグが作成された理由と、それがまだ適切かどうかを示すもの)を使用することもお勧めします。廃止されたブランチをアーカイブする方法を検討してください。
svn cp
は安価なコピーを使用し、分岐中に実際のファイルをコピーしません。svnbook.red-bean.com/en/1.1/ch04s02.htmlを
svn copy
次のコマンドを使用して、新しいブランチを作成します。
$ svn copy svn+ssh://host.example.com/repos/project/trunk \
svn+ssh://host.example.com/repos/project/branches/NAME_OF_BRANCH \
-m "Creating a branch of project"
svn switch svn+ssh://host.example.com/repos/project/branches/NAME_OF_BRANCH .
(現在のチェックアウトを新しいブランチに切り替えるsvn checkout svn+ssh://host.example.com/repos/project/branches/NAME_OF_BRANCH
場合)または(別のディレクトリに新しいブランチを作成する場合)を使用して、新しく作成されたブランチでの作業を開始します。
--parents
オプションを使用する必要がある場合もありますsvn copy
。
-m
オプションを省略すると、のようになりsvn: E155010: Path '/home/constantine/someDirectory/svn+ssh:https:/myhost.com/svn/dir1/dir2/trunk/dir3/dir4/dir5' does not exist
ます。では-m
、それは述べていますsvn: E205009: Local, non-commit operations do not take a log message or revision properties
。(アドレスを置き換えましたが、ofc、新しいブランチディレクトリ、および何らかの理由でSVNがエラーにマージしたpath + url全体を除いて、それらは存在します)。
svn cp /trunk/ /branch/NEW_Branch
トランクにローカルな変更がある場合は、を使用Rsync
して変更を同期します
rsync -r -v -p --exclude ".svn" /trunk/ /branch/NEW_Branch
rsync
このように使用する必要はありません。 svn cp
ローカルの変更もコピーされます。
通常は、svn + ssh://host.example.com/repos/project/branches/mybranchにコピーして、リポジトリに複数のブランチを保持できるようにしますが、構文は有効です。
リポジトリレイアウトの設定方法に関するアドバイスをいくつか紹介します。
ブランチのマージを計画している場合は、これを確認することを強くお勧めします。
Subversion 1.5はより多くのマージ追跡を組み込んでいると聞いていますが、それについての経験はありません。私のプロジェクトは1.4.x上にあり、svnmerge.pyは命の恩人です!
以下は、WindowsマシンでTortoiseSVNを使用してトランクからブランチを作成する手順です。これには明らかにTortoiseSVNクライアントをインストールする必要があります。