Subversion(バージョン管理システム)メモ


revert: コミット前の変更を戻す


リポジトリサイズ縮小


svnsync: リポジトリミラー(同期)

svnadmin create /var/www/svn/repos
svnsync init file:///var/www/svn/example http://svn.example.com/repos
svnsync sync file:///var/www/svn/repos

Subversion 1.8/1.9のインストール


色つきdiff


brame:誰が行を変更したのかを探す


diff:差分

# 一つ前と最新を比較
svn diff -r PREV:HEAD sample.txt

# チェックアウトした時点と最新を比較
svn diff -r BASE:HEAD sample.txt

# 明示的にリビジョンを指定して比較
svn diff -r 100:110 sample.txt

# 日付の範囲を指定して比較
svn diff -r {2012-9-1}:{2012-9-2} sample.txt

チェックアウトしたリビジョン番号の取得

初回チェックアウト時の認証の自動化

svn checkout --username user --password pass https://svn.example.com/svn/trunk/yourproject >logfile 2>&1 <<EOS
p
yes
yes
EOS

CentOS5.x/6.xにSubversion1.7をインストール

  1. 自動で行う場合
    • http://www.wandisco.com/subversion/download#centos からsvninstall_centos5_wandisco.sh をダウンロード。自動でやる場合は以下スクリプトを実行するだけ
      sudo su -
      chmod +x svninstall_centos5_wandisco.sh
      ./svninstall_centos5_wandisco.sh
  1. 手動で行う場合
  2. 既存環境をダンプ
    svnadmin dump /path/to/svn_repos > svn_repos_backup_file
  3. 既存環境を確認
    rpm -qa | grep subversion
    subversion-1.6.11-7.el5_6.4
    subversion-1.6.11-7.el5_6.4
    
    rpm -qa | grep svn
    mod_dav_svn-1.6.11-7.el5_6.4
  4. アンインストール
    yum remove subversion mod_dav_svn
  5. リポジトリ追加
    cat > /etc/yum.repos.d/WANdisco-1.7.repo << 'EOS'
    [WANdisco-dev]
    name=WANdisco SVN Repo 1.7
    enabled=0
    baseurl=http://opensource.wandisco.com/centos/5/devel/RPMS/$basearch/
    gpgcheck=1
    gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-WANdisco
    EOS
    
    rpm -import http://opensource.wandisco.com/RPM-GPG-KEY-WANdisco
  6. インストール
    ARCH=`uname -i`;yum install --enablerepo=WANdisco-dev subversion-perl.$ARCH subversion.$ARCH subversion-devel.$ARCH mod_dav_svn.$ARCH subversion-python.$ARCH
  7. httpdの再起動
    cp /etc/httpd/conf.d/subversion.conf /etc/httpd/conf.d/subversion.conf.rpmnew
    cp /etc/httpd/conf.d/subversion.conf.rpmsave /etc/httpd/conf.d/subversion.conf
    service httpd restart

Androidの無視設定


ファイル名変更で502 bad gateway

バグ予測

ドットファイルがコミットできない場合

一括してファイルの追加、削除を行う

cat >> ~/.bash_profile << 'EOS'
alias svndel="svn st | grep '^!' | sed -e 's/\![ ]*/svn del /g' | sh"
alias svnadd="svn st | grep '^?' | sed -e 's/\?[ ]*/svn add /g' | sh"
EOS
. ~/.bash_profile

svnadd
svndel

Unsupported working copy format

gitと併用する

複数の属性を付ける

.svnディレクトリ以外を列挙

sshポートフォワーディングを利用する

実行属性を付ける

svn:executableを付ければ、環境に応じて実行属性を付けてくれる。
Windows上でチェックアウトした場合は無視される。
ファイルのみ有効。ディレクトリに設定しても効果は無い。

ファイル名の文字コード

もし、他のLinuxサーバにチェックアウトしたファイルを置く場合は、ファイル名はutf8が良さそうです。

Windowsの場合はSJIS, Linuxの場合は環境変数のLANGにより自動的に変換されます。

$ locale -a | grep ja
ja_JP.eucjp
ja_JP.sjis
ja_JP.utf8

各ブラウザでの対応状況が違うようで、文字コードによってダウンロードされるファイル名が%??になったります。

sjiseucjputf8
IE6NGNGブラウザNG。ダウンロードOK
Firefox2OKOKOK
Opera9ブラウザOK。ダウンロードNGブラウザNG。ダウンロードOKブラウザNG。ダウンロードはOK

ftpで.svnディレクトリを除外して同期したい時

".svn"を除外したファイル一覧

svnファイルのパーミッション変更

svn ls -R | grep /$ | xargs chmod 705

svn作業ディレクトリのパーミッションを変更する

うっかりrootで作業すると、.svnディレクトリのパーミッションもrootになり、 他のユーザでコミット時に Permission denied になります。
その変更を元に戻します。

find . -name ".svn" | xargs chown -R 一般ユーザ:グループ

コミットログ変更時にメールを飛ばす

$ cd ${REPOS}/hooks/
$ chmod 755 post-revprop-change revprop-change-email.rb

コミットログの変更

cvsリポジトリの変換

もし、変換中にRCSファイルでエラーが出て停止する場合は、RCSファイルを消せば良い。

cvs2svn --encoding=EUC-JP

コミット前のソースをexport

TortoiseSVNならば、チェックアウト状態のディレクトリからexport可能。
.svnディレクトリを除いたファイル・ディレクトリが出力される。

tagの作成

リリースしたものをtagsに入れる。
「rel-日付」や「rel-バージョン」とするのがわかりやすいかも。

svn:ignoreとワイルドカード

svn:ignoreで**.*の挙動。

ソースからインストールしたsubversionをアンインストールする

Makefileにはuninstallが定義されていないので手動で削除する。

# rm -Rf /usr/local/man/man1/svn*
# rm -Rf /usr/local/man/man1/neon-config*
# rm -Rf /usr/local/info/svn*
# rm -Rf /usr/local/bin/neon-config
# rm -Rf /usr/local/bin/svn*
# rm -Rf /usr/local/lib/libsvn_*

外部ライブラリの取り込み

バックアップ/リストア

  1. 「/var/www/svn/」にある複数リポジトリを「./svn_dump/」にダンプ
  2. 「./svn/」に新しいリポジトリを作成
  3. 「./svn/」にダンプしたデータをインポート
    svn_src=/var/www/svn
    svn_dump=./svn_dump
    svn_dest=./svn
    
    # dump
    for p in $(find $svn_src -maxdepth 1 -mindepth 1 -type d); do \
      echo "-- $p"; \
      [[ ! -f "$svn_dest/$(basename $p).$(date +%Y%m%d).gz" ]] && svnadmin dump $p | gzip > $svn_dump/$(basename $p).$(date +%Y%m%d).gz; \
    done
    
    # create repo
    for p in $(find $svn_src -maxdepth 1 -mindepth 1 -type d); do \
      echo "-- $p"; \
      [[ ! -d "$svn_dest/$(basename $p)" ]] && svnadmin create --fs-type=fsfs $svn_dest/$(basename $p); \
    done
    
    # load
    for p in $(find $svn_src -maxdepth 1 -mindepth 1 -type d); do \
      echo "-- $p"; \
      [[ -d "$svn_dest/$(basename $p)" ]] && zcat $svn_dump/$(basename $p).$(date +%Y%m%d).gz | svnadmin load $svn_dest/$(basename $p); \
    done

Subversionリポジトリの統合

複数のリポジトリを1つに統合します。
ただし、tracのコンテンツの統合は難しそう。

  1. 統合するリポジトリのダンプファイルを作成する
    svnadmin dump /repository1-path | gzip > repo1.gz
    svnadmin dump /repository2-path | gzip > repo2.gz
  2. 統合先リポジトリを作成する
    svnadmin create --fs-type=fsfs /new-repository-path 
  3. 統合先リポジトリに統合されるリポジトリのファイルを格納するためのディレクトリを、各々一つずつ作成する
    svn co file:///new-repository-path
    svn mkdir path-to-dir1-for-repository1
    svn mkdir path-to-dir2-for-repository2
    svn commit -m "message"
  4. dumpした統合対象リポジトリを、各々のために用意したディレクトリにロードする(--parent-dir付き)
    zcat repo1.gz | svnadmin load /new-repository-path --parent-dir path-to-dir1-for-repository1
    zcat repo2.gz | svnadmin load /new-repository-path --parent-dir path-to-dir2-for-repository2
  5. リポジトリのリカバーを実行する
    svnadmin recover /new-repository-path
  6. tracも使用している場合は、同期を取る。
    trac-admin /trac-repository-path resync
    
    コミットログもちゃんと引き継がれます。

デフォルト構成リポジトリ作成スクリプト

リビジョン間の差分をエクスポートする

  1. TortoiseSVNのメニューから「ログを表示」
  2. 2つのrevisionを選択する
  3. 右クリックして「リビジョンを比較」
  4. リストのすべてのファイルを選択する(CTRL+A)
  5. 「選択をエクスポート」で保存先フォルダを選択
    同様に「選択ファイルのリストを保存」だと、ファイル名一覧を保存できる(Unicode)

svn copyとコミットログ

TortoiseSVNのデフォルトでは、svn copyや svn rename したファイルのログが表示されない。
ログ表示ウィンドウの「コピー/名前の変更」チェックを外すと表示されるようになる。

アクセス制御を行う

  1. デフォルトのpre-commit スクリプトをコピー
    cp ${REPOS}/hooks/pre-commit.tmpl ${REPOS}/hooks/pre-commit
  2. ソースからcommit-access-controlをコピー
    cp /usr/share/doc/subversion-1.2.1/tools/hook-scripts/commit-access-control.pl ${REPOS}/hooks/commit-access-control.pl
    cp /usr/share/doc/subversion-1.2.1/tools/hook-scripts/commit-access-control.cfg.example ${REPOS}/hooks/commit-access-control.cfg
  3. 実行権限を与える
    $ chmod +x pre-commit commit-access-control.pl
  4. commit-access-control.cfgを編集してアクセス制御を行う

コミット時にメールを飛ばす&該当チケットのクローズ

  1. デフォルトのpost-commit スクリプトをコピーして編集します。 filepost-commit
    cp ${REPOS}/hooks/post-commit.tmpl ${REPOS}/hooks/post-commit
  2. tracのスクリプトもコピーします。 filetrac-post-commit-hook
    cp src/trac-0.9.3-ja-1/contrib/* ${REPOS}/hooks/
  3. email送信スクリプトも同じディレクトリに配置し、内容を編集します。fileemail-send.rb
    ${REPOS}/hooks/email-send.rb
  4. スクリプトに実行権限を与えます
    $ chmod +x post-commit trac-post-commit-hook email-send.rb

copyやmoveでワイルドカードを使う

エクスポート時に強制的に改行コードを指定する

Word,Excel,PowerPoint,PDFの文書も比較する

ブランチの作成

タグの作成

一般的なリポジトリレイアウト

一般的なプロジェクトディレクトリツリー

SAMPLE
└─trunk
    │  README       プロジェクトを説明する短い文章
    │  BUILDING     ビルド方法
    │  GLOSSARY     プロジェクト固有の専門用語
    │  
    ├─data         データファイル等
    ├─db           データベース関係
    ├─doc          ドキュメント類
    ├─src          プログラムソースコード
    ├─util         ユーティリティプログラム
    ├─vendor       サードパーティ製ライブラリやヘッダファイル
    └─vendorsrc    サードパーティ製ソースコード

特定ディレクトリ以下の複数の Subversion リポジトリを公開する場合


現在の設定されている属性を表示する

svn -v proplist *.php

svnにパスワードを保存させない

共有アカウント等で最初の一人がコミットするとパスワードが保存されるため、他の人のコミットも最初の人の名前になって区別が付かなくなる。
毎回パスワードを入力させるように変更する。

# コメントアウトされている場合は外す
vi ~/.subversion/config
----
[auth]
...
store-passwords = no
store-auth-creds = no
----

# 認証済み情報削除
rm -f ~/.subversion/auth/svn.simple/*

エディタを指定する

$ vi ~/.subversion/config
------
[helpers]
...
editor-cmd= /usr/bin/vim

svn:mime-type自動属性設定

拡張子に応じて「svn:mime-type」を自動で設定できる。
ただし、クライアント毎に設定が必要


添付ファイル: filesvn-config 1471件 [詳細] filetrac-post-commit-hook 2318件 [詳細] filewinmerge.png 1993件 [詳細] filexdocdiff_1.png 2065件 [詳細] fileemail-send.rb 2252件 [詳細] filepost-commit 2366件 [詳細] filepost-revprop-change 2424件 [詳細] filerevprop-change-email.rb 2355件 [詳細] filesvn-scripts.zip 3004件 [詳細] filetortoisesvn_diff.png 1886件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2019-04-20 (土) 12:54:09