svn revert -R .
svn version | repo MB |
1.7 | 1216 |
1.8 | 1206 |
svn version | repo MB |
1.8 | 1347 |
1.9 | 1199 |
du -m /var/www/svn/dev/db/revs/*/* | sort -nr | head -n 10
svn log file:///var/www/svn/dev/ -v -q -r 242
svndumpfilter exclude /rpm/RPMS < old.dump > new.dump
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
sudo yum remove subversion sudo rm /etc/yum.repos.d/WANdisco-1.7.repo
dist_ver=$(grep -o -P "\d" /etc/redhat-release | head -n 1) svn_ver=1.9 ARCH=$(uname -i) sudo bash -c "cat > /etc/yum.repos.d/subversion.repo << 'EOS' [subversion] name=Wandisco SVN Repo enabled=1 baseurl=http://opensource.wandisco.com/rhel/$dist_ver/svn-${svn_ver}/RPMS/$basearch/ gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-WANdisco EOS" sudo rpm -import http://opensource.wandisco.com/RPM-GPG-KEY-WANdisco sudo yum install subversion-perl.$ARCH subversion.$ARCH subversion-devel.$ARCH mod_dav_svn.$ARCH subversion-python.$ARCH svn --version svn, version 1.9.5 (r1770682)
sudo cp /etc/httpd/conf.d/subversion.conf /etc/httpd/conf.d/subversion.conf.rpmnew sudo cp /etc/httpd/conf.d/subversion.conf.rpmsave /etc/httpd/conf.d/subversion.conf sudo /sbin/service httpd restart
sudo sh -c 'echo "# WANdisco Open Source Repo" >> /etc/apt/sources.list.d/WANdisco.list' sudo sh -c 'echo "deb http://opensource.wandisco.com/ubuntu precise svn19" >> /etc/apt/sources.list.d/WANdisco.list' wget -q http://opensource.wandisco.com/wandisco-debian.gpg -O- | sudo apt-key add - sudo aptitude update sudo aptitude install subversionsvn --version svn, version 1.9.7 (r1800392)
svn st svn: E155036: Please see the 'svn upgrade' command svn upgrade
cd /var/www/svn/ ls -1 ./ | xargs -i sudo -u apache svnadmin upgrade {}
vi ~/.subversion/config ---- diff-cmd = colordiff ----
svn blame file.txt 178 username #contents 178 username 178 username *Android [#d6b42d7f] ...
# 一つ前と最新を比較 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
LANG=C svn info | grep Revision | awk '{ print $NF }' // 300
svn checkout --username user --password pass https://svn.example.com/svn/trunk/yourproject >logfile 2>&1 <<EOS p yes yes EOS
sudo su - chmod +x svninstall_centos5_wandisco.sh ./svninstall_centos5_wandisco.sh
svnadmin dump /path/to/svn_repos > svn_repos_backup_file
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
yum remove subversion mod_dav_svn
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
ARCH=`uname -i`;yum install --enablerepo=WANdisco-dev subversion-perl.$ARCH subversion.$ARCH subversion-devel.$ARCH mod_dav_svn.$ARCH subversion-python.$ARCH
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
svn st svn: E155036: Please see the 'svn upgrade' command svn: E155036: Working copy '/path/to' is too old (format 10, created by Subversion 1.6) svn upgrade
*.apk *.ap_ *.dex *.class bin gen local.properties .classpath .project .settings
vi /etc/httpd/conf.d/vhost.conf ---- #NameVirtualHost *:443 ---- service httpdf graceful
# dot file 403 Forbidden RedirectMatch 403 /\.
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
/usr/local/bin/change-svn-wc-format.py . 1.5
svn propset svn:keywords "Date Author Id Revision HeadURL" filename
svn propset svn:eol-style "native" filename
find tmp -name ".svn" -prune -o -type d -print
find tmp -name ".svn" -prune -o -type d -print | xargs svn propset 'svn:ignore' '*'
ssh -l ログイン先ユーザ名 -g -L 20443:127.0.0.1:443 ログイン先
$ svn co https://127.0.0.1:20443/svn/リポジトリ
svn:executableを付ければ、環境に応じて実行属性を付けてくれる。
Windows上でチェックアウトした場合は無視される。
ファイルのみ有効。ディレクトリに設定しても効果は無い。
svn propset svn:executable on *.php
もし、他のLinuxサーバにチェックアウトしたファイルを置く場合は、ファイル名はutf8が良さそうです。
Windowsの場合はSJIS, Linuxの場合は環境変数のLANGにより自動的に変換されます。
$ locale -a | grep ja ja_JP.eucjp ja_JP.sjis ja_JP.utf8
各ブラウザでの対応状況が違うようで、文字コードによってダウンロードされるファイル名が%??になったります。
sjis | eucjp | utf8 | ||||||
IE6 | NG | NG | ブラウザNG。ダウンロードOK | |||||
Firefox2 | OK | OK | OK | |||||
Opera9 | ブラウザOK。ダウンロードNG | ブラウザNG。ダウンロードOK | ブラウザNG。ダウンロードはOK |
$ cd /path/to/www/ $ lftp -u foo mywebsite.jp > cd /path/to/www > mirror -Rev -x "\\.svn" .
find . -type d -name ".svn" -prune -or -print
svn ls -R | grep /$ | xargs chmod 705
うっかりrootで作業すると、.svnディレクトリのパーミッションもrootになり、
他のユーザでコミット時に Permission denied になります。
その変更を元に戻します。
find . -name ".svn" | xargs chown -R 一般ユーザ:グループ
$ cd ${REPOS}/hooks/ $ chmod 755 post-revprop-change revprop-change-email.rb
$ cd ${REPOS}/hooks/ $ cp pre-revprop-change.tmpl pre-revprop-change $ chmod 755 pre-revprop-change
もし、変換中にRCSファイルでエラーが出て停止する場合は、RCSファイルを消せば良い。
cvs2svn --encoding=EUC-JP
TortoiseSVNならば、チェックアウト状態のディレクトリからexport可能。
.svnディレクトリを除いたファイル・ディレクトリが出力される。
リリースしたものをtagsに入れる。
「rel-日付」や「rel-バージョン」とするのがわかりやすいかも。
https://.../svn/SandBox/tags/rel-20070213
svn:ignoreで*と*.*の挙動。
*.[tT][xX][tT]
$ touch .foo $ touch foo $ touch foo.dat
$ svn propedit svn:ignore . ---- * ---- $ svn status M .
$ svn propedit svn:ignore . ---- *.* ---- $ svn status ? foo M .
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_*
$ svn co https://svn.example.com/svn/SandBox/branches/ $ cd branches $ mkdir libs $ svn add libs $ vi extern.txt ---------------------------------- log4php -r11 https://svn.example.com/svn/labs/PhpLib/log4php/src/log4php/ ... ---------------------------------- $ svn propset svn:externals -F extern.txt libs $ svn commit -m "externals log4php" $ svn update $ rm extern.txt
$ svn propset svn:externals 'log4php -r11 https://svn.example.com/svn/labs/PhpLib/log4php/src/log4php/' libs
svnadmin dump [repos_path] > [backup_file]
svnadmin create --fs-type=fsfs [repos_path] svnadmin load [repos_path] < [backup_file]
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
svnadmin hotcopy [repos_path] [backup_path]
/usr/share/doc/subversion-1.2.1/tools/backup/hot-backup.py
複数のリポジトリを1つに統合します。
ただし、tracのコンテンツの統合は難しそう。
svnadmin dump /repository1-path | gzip > repo1.gz svnadmin dump /repository2-path | gzip > repo2.gz
svnadmin create --fs-type=fsfs /new-repository-path
svn co file:///new-repository-path svn mkdir path-to-dir1-for-repository1 svn mkdir path-to-dir2-for-repository2 svn commit -m "message"
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
svnadmin recover /new-repository-path
trac-admin /trac-repository-path resyncコミットログもちゃんと引き継がれます。
./svn-create.sh プロジェクト名
./svn-adduser.sh ユーザ名
svn log -qv -rOLDリビジョン:NEWリビジョン リポジトリパス
TortoiseSVNのデフォルトでは、svn copyや svn rename したファイルのログが表示されない。
ログ表示ウィンドウの「コピー/名前の変更」チェックを外すと表示されるようになる。
cp ${REPOS}/hooks/pre-commit.tmpl ${REPOS}/hooks/pre-commit
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
$ chmod +x pre-commit commit-access-control.pl
fix #?? fixed #?? fixes #??,#??
cp ${REPOS}/hooks/post-commit.tmpl ${REPOS}/hooks/post-commit
cp src/trac-0.9.3-ja-1/contrib/* ${REPOS}/hooks/
${REPOS}/hooks/email-send.rb
$ chmod +x post-commit trac-post-commit-hook email-send.rb
ruby -e "Dir.glob(ARGV[0]).each {|i| system(%| svn mv #{i} #{ARGV[1]} |) }" '*.sql' ..
svn export file://tmp/repos my-export --native-eol CRLF
C:\Program Files\WinMerge\WinMergeU.exe -e -x -ub -dl %bname -dr %yname %base %mine
C:\Program Files\WinMerge\WinMergeU.exe -e -x -ub -wl -dl "■編集不可:相手 %tname■" %theirs -dm %mname %merged -wr -dr "■編集不可:自分 %yname■" %mine
trunk/ | 主系。 プロジェクトの主な開発が行われるディレクトリ |
---|---|
branches/ | 変更を別の開発ラインに分離する。安定したら主系にマージする。 一つの開発の流れが、もう一方と独立して存在しているが、 もし過去にさかのぼれば、同じ履歴を共有している |
tags/ | 特定のリビジョン (たとえば、リリースリビジョン)に印をつける事。 プロジェクトの「スナップショット」 |
sandbox/ | お砂場。テスト用 |
SAMPLE └─trunk │ README プロジェクトを説明する短い文章 │ BUILDING ビルド方法 │ GLOSSARY プロジェクト固有の専門用語 │ ├─data データファイル等 ├─db データベース関係 ├─doc ドキュメント類 ├─src プログラムソースコード ├─util ユーティリティプログラム ├─vendor サードパーティ製ライブラリやヘッダファイル └─vendorsrc サードパーティ製ソースコード
# vi /etc/httpd/conf.d/subversion.conf ---------------------------------------------------- <Location /svn> DAV svn SVNParentPath /home/svnroot # Limit write permission to list of valid users. <LimitExcept GET PROPFIND OPTIONS REPORT> # Require SSL connection for password protection. # SSLRequireSSL AuthType Basic AuthName "Authorization Realm" AuthUserFile /home/svnroot/.htpasswd Require valid-user </LimitExcept> </Location> ---------------------------------------------------- # service httpd restart
svn -v proplist *.php
共有アカウント等で最初の一人がコミットするとパスワードが保存されるため、他の人のコミットも最初の人の名前になって区別が付かなくなる。
毎回パスワードを入力させるように変更する。
# コメントアウトされている場合は外す 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」を自動で設定できる。
ただし、クライアント毎に設定が必要
/.subversion/config