【Linux】【SVN】SVN操作メモ【SW】

Subversionメモ

CUI での操作のメモ。
GUI は TortoiseSVN プロジェクト日本語トップページ - OSDN を使っている。

f:id:dnkrnka:20180701004926p:plain:w100:right

[svn copy] ブランチを作る

trunk からブランチ「A」を作る場合

% svn copy https://subversion/server/trunk  https://subversion/server/branch/A

同時にコミットメッセージを書く場合は次のようにする

% svn copy https://subversion/server/trunk  https://subversion/server/branch/A -m 'comment'

コメントは改行を含めることも可能である。

% svn copy https://subversion/server/trunk  https://subversion/server/branch/A -m '
comment(1)
comment(2)
'



[svn ls] リポジトリ以下の構成を見る

一覧のみ

% svn ls https://subversion/server/trunk

詳細表示

% svn ls -v https://subversion/server/trunk



[svn info] リポジトリ情報の表示

ローカルの作業場で svn info を実施する。

% svn info



[svn log] ログ表示

派生したブランチなどは「--stop-on-copy」を付けて、ブランチ作成後のログ移行に制限されるので見やすくなる。

% svn log --stop-on-copy [ローカル作業場]
% svn log --stop-on-copy https://subversion/server/branch/A

変更ファイルやディレクトリ名を表示する場合は、-v オプションを併用すると良い。

% svn log -v --stop-on-copy https://subversion/server/branch/A



[svn move] ブランチ名変更

ブランチ「https://subversion/server/branch/A」を「https://subversion/server/branch/A_old」に変える。

% svn move https://subversion/server/branch/A https://subversion/server/branch/A_old



[svn diff] 差分表示

rev1000 と rev1004 の差分を表示する

% svn diff -r 1000:1004 https://subversion/server/branch/A

作業リポジトリと rev1004 の差分を表示する

% svn diff -r 1004 .

変更ファイル名のみを表示する

% svn diff --summarize 



[svn annotate] 変更履歴を辿る

file1 の変更履歴を表示する。

% svn annotate https://subversion/server/branch/A/file1



[svn cat] 特定のリビジョンのファイルを表示する

revision 1000 のファイル file1 を表示する。

% svn cat -r 1000 https://subversion/server/branch/A/file1



[svn merge]ブランチの内容をtrunkへマージする

  • ブランチ(branch/XXXX)を trunk から切り出したタイミングは r10384 である。
  • そして、ブランチの最初のパッチ投入は r10438 であった。
  • 従って、r10438 から r10530 までの変更を trunk にマージする。

1. 取り込みたい範囲(リビジョン)確認する

% svn co https://subversion/server/trunk
% svn log --stop-on-copy 'https://subversion/server/branch/XXXX'
r10530 | neko | 2017-11-20 22:30:06 +0900 (2017/11/20) | 7 lines
中略
r10438 | neko | 2017-11-17 09:35:56 +0900 (2017/11/20) | 24 lines
r10384 | neko | 2017-11-15 20:06:56 +0900 (2017/11/20) | 8 lines

2. 取り込み可能かテストする

% svn merge --dry-run -r 10384:10530 https://subversion/server/branch/XXXX

3. 本実行

% svn merge           -r 10384:10530 https://subversion/server/branch/XXXX
--- r10385 から r 10530 までを '.' にマージしています:

4. trunk へコミットする

% svn commit -m 'Merge: branch/XXXX to trunk' .



[svn mkdir]リポジトリ以下にディレクトリを作成する

  • リポジトリ以下にディレクトリを作成する
  • mkdir -p に相当するオプションは --parent である

例:リモートブランチ「subversion/server/branch」以下に ./A/B/C/D/E というディレクトリを作成する (./Aは存在していない)

% svn mkdir --parent 'https://subversion/server/branch/A/B/C/D/E' -m 'comment and message'



[svn switch]ブランチを切り替える

  • 例:ローカルにある trunk のコード(rev10000〜最新)をリモートのブランチ(branch/YYYY)にマージする場合

1. trunk「https://subversion/server/trunk」のコードをチェックアウトし作業する

% svn co https://subversion/server/trunk
% cd trunk
何らかの変更をする
(-- snip -- )
%  svn info | grep URL
URL: https://subversion/server/trunk

2. ブランチ「https://subversion/server/branch/YYYY」に切り替える

% svn switch https://subversion/server/branch/YYYY

3. 作業場がブランチ(branch/YYYY)に切り替わったかをチェックする

% svn info | grep URL
URL: https://subversion/server/branch/YYYY

4. 変更差分をチェックする

% svn diff

5. trunk からブランチ(branch/YYYY)へ取り込み可能かテストする

% svn merge --dry-run -r 10000:HEAD https://subversion/server/trunk

6. trunk から作業場のブランチ(branch/YYYY)へ取り込みする

% svn merge           -r 10384:10530 https://subversion/server/branch/YYYY
--- r10385 から r 10530 までを '.' にマージしています:

7. ブランチ(branch/YYYY)のリポジトリへコミットする

% svn commit -m 'Merge: trunk to branch/YYYY' .