Linuxがサーバ、macがクライアントとして使うという状況を想定しています。
vc-svn.plでvcが使いたいけど機能が足りないのでpsvn.plのほうで。というよりコマンドのほうが楽かも。
psvn.plはCarbon Emacsだと始めから入ってます。
mac用GUIversions
subversion環境を作るときのメモ
とりあえず下ごしらえをインストール
$ sudo aptitude install subversion $ sudo aptitude install subversion-tools $ sudo aptitude install libapache2-svn
mod_dav_svnの設定
$ sudo emacs /etc/apache2/mods-available/dav_svn.conf #下の部分のコメントアウトをはずす <Location /svn> DAV svn SVNParentPath /var/lib/svn AuthType Basic AuthName "Subversion Repository" AuthUserFile /etc/apache2/dav_svn.passwd # 書き込みのみBasic認証を要求する場合 <LimitExcept GET PROPFIND OPTIONS REPORT> Require valid-user </LimitExcept> </Location>
レポジトリ。新しいレポ作るときは下二行を繰り返し。
$ sudo mkdir /var/lib/svn $ sudo svnadmin create /var/lib/svn/testrepo $ sudo chown -R www-data:www-data /var/lib/svn/testrepo
windowsの設定わかんない。
$ sudo port install subversion +tools $ svn --version svn, バージョン 1.4.x (rxxxx) コンパイル日時: Dec xx xxxx, xx:xx:xx Copyright (C) 2000-2007 CollabNet. Subversion is open source software, see http://subversion.tigris.org/ This product includes software developed by CollabNet (http://www.Collab.Net/). 以下のリポジトリアクセス (RA) モジュールが利用できます: * ra_dav : WebDAV (DeltaV) プロトコルを使ってリポジトリにアクセスするモジュール。 - 'http' スキームを操作します - 'https' スキームを操作します * ra_svn : svn ネットワークプロトコルを使ってリポジトリにアクセスするモジュール。 - 'svn' スキームを操作します * ra_local : ローカルディスク上のリポジトリにアクセスするモジュール。 - 'file' スキームを操作します
サーバ側
新しくsubversionのリポジトリを作成する
$ sudo svnadmin create /var/lib/svn/testrepo $ sudo chown -R www-data:www-data /var/lib/svn/testrepo
もともとあったプロジェクトなんかをリポジトリに登録する場合に
クライアント側
$ svn import -m 'コメント' 'プロジェクトディレクトリ' 'リポジトリのパス' $ svn import -m "test import" /usr/local/work/testproject https://xxx.co.jp/svn/testrepo 追加しています /usr/local/work/testproject/file1.txt 追加しています /usr/local/work/testproject/file2.txt 追加しています /usr/local/work/testproject/file3.txt リビジョン1をコミットしました
svn/testrepoの下にtestprojectディレクトリ内のファイルがコミットされる
$ svn import -m "test import" /usr/local/work/testproject https://xxx.co.jp/svn/testrepo/firstproject
だとfirstprojectディレクトリを自動で作ってそのなかにコミットされる
ここからチェックアウトする場合は一度ディレクトリを削除しなくちゃだめっぽいかもしれないかも
$ svn checkout 'リポジトリのパス' '作業ディレクトリ' $ svn checkout http://xxx.co.jp/svn/testrepo /usr/local/work/testproject
作業ディレクトリを指定しないとリポジトリのパス名の最後のディレクトリが作業コピーとして作成される。
たぶん・・・
()のなかはEmacsのpsvnを使うときのコマンド。
とりあえずこれ。
Emacsではこの画面上でpsvnのコマンドを使う
$ svn status
毎朝やること。
他の人の変更とかも更新したり
画面の更新はg
$ svn update
作業の変更点をリポジトリに登録します。セーブみたいな。
$ svn commit -m "コメント"
ファイルを指定してコミットする場合
$ svn commit --file foo.m -m "コメント"
ファイル指定するときもうバージョン管理下にあるファイルを指定する場合は–force-logとする必要があります。
$ svn commit --file foo.m svn: Log message file is a versioned file; use '--force-log' to override $ svn commit --force-log foo.m
ファイルやフォルダを追加します。
$ svn add (file or directory)
この時点ではまだリポジトリには登録されていません。
コミットすることでリポジトリに反映されます。
これもコミットするまでリポジトリに反映されません。
$ svn remove file
コミットするまでリポジトリに反映されません。
$ svn copy "コピー元" "コピー先"
コミットするまでリポジトリに反映されません。
$ svn move "コピー元" "コピー先"
なにもオプションを指定しないと全部表示する
$ svn log
一つのファイルやディレクトリも指定できる。URIでもおっけ
$ svn log file
リビジョンを1つだけ指定するとそのリビジョンのログを表示する
$ svn log -r 10
リビジョンを2つコロンで区切って指定すると2つのリビジョンの範囲を表示する
$ svn log -r 13:22
詳細な表示は-vをつける
$ svn log -r 10:20 file.txt -v
引数なしで指定すると作業コピーの内容と、.svn 領域にキャッシュされている「修正元リビジョン」 のコピーとを比較する
psvnだとこっちだけしかできないかもしれませ
$ svn diff
リビジョンを一つだけ指定すると、作業コピーとリポジトリの特定のリビジョンを比較する
$ svn -r 3 file
リビジョンを2つコロンで区切って指定すると2つのリビジョンを直接比較する
$ svn -r 5:4 file
最後にコミットまたはアップデートした内容にもどす。
$ svn revert file1.txt
リビジョン8から5に戻す場合
$ svn merge -r 8:5 https://xxx.co.jp/svn/testrepo $ svn commit -m "Undoing change committed in r5."
個別のファイルだけ戻す場合は
$ svn merge -r 8:4 file1.txt $ svn commit -m 'reverted to 4' file1.txt
コピー使うだけ。
$ svn copy 'コピーもと' 'コピー先' #例 $ svn copy trunk branches/test_branch $ svn commit -m "branch"
これもコピーだけ。
$ svn copy 'コピーもと' 'コピー先' #例 $ svn copy trunk tags/1.0-release $ svn commit -m "tags 1.0-release"
たとえば一緒にmercurialでも管理していたときに.hgフォルダはsvnの管理から外したくなります。 そゆときに使います。
$ svn propset svn:ignore 対象ファイル 対象フォルダ
直下の.projectを除外対象にしたいとき。
$ svn propset svn:ignore .project .
.hg以下のファイルを全部対象外にしたいとき
svn propset svn:ignore '*' ./.hg
こうすると直下にある.hgはsvnの管理から除外されます。
いつでも除外したい物は
~/.subversion/configにある
#[miscellany]とenable-auto-props = yesのコメントアウトをはずします。
... [miscellany] ... enable-auto-props = yes ...
で、さらにglobal-ignoresのコメントアウトもはずして除外したいものをつけたします。
#global-ignores = *.o *.lo *.la #*# .*.rej *.rej .*~ *~ .#* .DS_Store コメントアウトを外して、.hgを付け加える。 global-ignores = *.o *.lo *.la #*# .*.rej *.rej .*~ *~ .#* .DS_Store .hg
コンフリクト(衝突)。
同じファイルの同じ行に違う変更があった場合updateだけじゃだめでcommitもできないため、
手作業で修正が必要になります。
例えばtext.txtでコンフリクトが発生した場合、発生した箇所で
........ <<<<<<< .mine ////自分の変更 ======= /////ほかの変更 >>>>>>> .r209
みたいに衝突箇所を書いてくれてます。
それと下記の3つのファイルが作成されます。
例えばこんなやつ
それらを見ながら手作業で修正します。
解決したらコンフリクトが解決したことをSubversionに教えます。
$ svn resolved test.txt 'test.txt' の競合状態を解消しました
一緒に3つのファイルも削除されます。
これでコミットできるようになります。