トップ «前の日(01-21) 最新 次の日(01-23)» 追記

Masa's blog

検索キーワード:

2010年01月22日 svn(subversion-1.6.x)儂(わし)的解釈によるメモ

_ svn(subversion-1.6.x)儂(わし)的解釈によるメモ

準備作業

$ mkdir ${HOME}/svn
$ svnadmin create ${HOME}/svn

リポジトリ用ディレクトリを作成し、初期化する。svn利用時の、最初に一度だけ実行する。

$ svn mkdir file:///${HOME}/svn/trunk
$ svn mkdir file:///${HOME}/svn/branches
$ svn mkdir file:///${HOME}/svn/tags

習慣的に trunk(開発用)、branches(枝分かれ用)、tags(タグ=リリース用)の3つの(リポジトリ上の?)ディレクトリを作成し、使い分ける。

プロジェクトの登録

$ mkdir project-X
$ svn import project-X file:///${HOME}/svn/trunk/project-X -m "メモ"
$ rmdir project-X

登録(import)の完了したディレクトリは削除して良い。今後は、あくまでもリポジトリの中身が本体となる。

プロジェクトの取り出し

$ svn checkout file:///${HOME}/svn/trunk/project-X

日々の運用

$ cd project-X
$ ファイル、ディレクトリ、シンボリックリンクの作成、編集、削除等の操作...
$ svn status
? ファイル等
! ファイル等
M ファイル等

`?'が表示されたファイル等は新規作成されたブツなので

$ svn add ファイル等

で、リポジトリに追加(予約?)する。リポジトリに追加(予約?)されたブツは、

$ svn status
A ファイル等

と表示される。

`!'が表示されたファイル等は削除されたブツなので

$ svn delete ファイル等

で、リポジトリから削除(予約?)する。リポジトリから削除(予約?)されたブツは、

$ svn status
D ファイル等

と表示される。

svn statusで`?'や`!'が表示されない状態になれば、

$ svn commit -m "メモ"

を行って、リポジトリに正式に変更を登録する。このタイミングでリポジトリにより管理されているリビジョン番号がインクリメントされる。

プロジェクトの更新

複数のメンバーで、一つのプロジェクトを管理していると、知らぬ間にリポジトリが更新されているかも知れない。

$ svn update

を必要に応じて実行し、手元の作業エリアを更新する。

場合によると、(commit前の)手元のファイルと、リポジトリ上の最新ファイルとの間で、矛盾する更新が行われているかも知れない。その場合は以下のようなメッセージとともに、指示待ちのプロンプトが表示される。

$ svn update
Conflict discovered in 'ブツ'.
Select: (p) postpone, (df) diff-full, (e) edit,
        (mc) mine-conflict, (tc) theirs-conflict,
        (s) show all options:

`e'を入力すると、エディタが起動する。矛盾を無くすように修正し、エディタを終了後、

Select: (p) postpone, (df) diff-full, (e) edit, (r) resolved,
        (mc) mine-conflict, (tc) theirs-conflict,
        (s) show all options:

のメッセージが表示される[(r) resolvedが増えている]ので、`r'を入力しupdateを完了させる。

`e'の代りに`p'(postpone:延期)を入力すると、ブツ.mine(自分の修正)、ブツ.rxx(1世代前)、ブツ.ryy(最新世代)のファイルが作成され、updateが強制終了される。これらのファイルを参考にブツを修正し、svn updateを再度実行する。svn updateが成功したならば

$ svn resolved ブツ

を実行することで、ブツ.mine(自分の修正)、ブツ.rxx(1世代前)、ブツ.ryy(最新世代)を削除する。

リリース(タグ付け)

svn copy file:///${HOME}/svn/trunk/project-X file:///${HOME}/svn/tags/project-X-0.1 -m "メモ"

でリリースを確定する。

エキスポート(配布用取り出し)

最新を取り出す場合は

svn export file:///${HOME}/svn/tags/project-X-0.1

特定のリビジョンを取り出す場合は

svn export file:///${HOME}/svn/tags/project-X-0.1 -rリビジョン番号

リビジョン番号の確認は

svn log

で行える。

リビジョン番号の指定は

-r'{2010-01-22 15:38:06}'

のような日時指定が可能。時刻を省略した場合は 00:00:00 を指定したことになる。

その他

手元の作業エリアとリポジトリとの差分を表示するには

svn diff

修正の履歴を引き継ぎながらリネームしたい場合は

svn move OLDブツ NEWブツ

となる。

後は、適当なラッパースクリプトをでっちあげて、入力の軽減を図ろうか...。