■
基本的な作業サイクル
次の順序を守っていれば基本問題はありません。
- 作業コピー(ローカル)の更新
svn up(update)
- 作業コピー(ローカル)の変更
svn add svn delete svn copy svn move
- 自分の変更点の確認
svn st(status) svn diff svn revert
svn diff: 編集したものとレポジトリとの差を表示します
svn revert: 編集したものを削除してレポジトリの最新リビジョンで置き換える。作業予告を取り消します
- コミット
svn ci(commit) [-m 'コミットログ']
リビジョン・キーワード
- HEAD : レポジトリの最新リビジョン
svn diff --revision HEAD
作業コピーとレポジトリ最新リビジョンとの差異を表示
- BASE : ローカルで最後にアップデートした時のリビジョン
svn diff --revision BASE:HEAD filename
filenameのローカルでのアップデートした時と最新のリビジョンとの差異を表示
- COMMITED : BASE以前に、ファイルかディレクトリが変更された最後のリビジョン
- PREV : COMMITED-1のリビジョン
svn diff --revision PREV:COMMITED filename
filenameのレポジトリにおける最後の変更の内容を表示
知っ得コマンド
- ファイルは無視してディレクトリだけレポジトリに追加
svn add --non-recursive dir_name
svn status
- 管理化にないファイルを非表示
svn st(status) --quiet(-q)
- 編集したファイルだけではなくすべてのファイルの状態を表示
svn st --verbose(-v)
- レポジトリと通信をおこないHEADよりも古いファイルを表示
svn st --show-updates(-u)
-
- -
'*'が表示されたファイルが、HEADよりも古いことを示す
- パッチを作成
svn diff > patch_file
- 特定リビジョン同士の差を表示
svn diff -r 10:20
- ファイルの特定リビジョンでの内容を表示
svn cat -r 10 filename
- 特定のリビジョンのバイナリデータ(画像..etc)を出力
svn cat -r 10 image.jpg > image.jpg.v10
- ロックを解除する
svn cleanup
Confilct(衝突)時の挙動
- filenameに衝突マーカが置かれ、衝突内容が明記されます。
- filename.mineが作成される。(ローカルに存在した最後の変更内容)
- filename.rBASE (BASEリビジョンのファイル)
- filename.rHEAD (HEADリビジョンのファイル)
これら3つの一時ファイルが削除されるまで(衝突が解決されるまで)、
subversionはこのファイルのコミットを許してくれません。
衝突の解決の手順としては、
- 手動で衝突マーカが置かれた源ファイルを修正
- 上記3つのfilename.*のうちの1つで源ファイルを上書き
- svn revert filename としてローカルでの変更を取り消す
のうちの1つを行ないます。
svn revert以外の解決策を選択した場合は、
svn resolved filename
として、Subversionに衝突が解決されたことを通知します。
svn resolvedコマンドによって、一時ファイルが削除されるので、
コミットを行なうことができるようになります。
svn revertを選択した場合、自動で一時ファイルが削除され、
filenameをBASEの状態に戻したことをsubversionに通知するので、
svn resolvedコマンドを実行する必要はありません。
これらのコマンドさえ扱えれば、svn clientは十分使えると思います:-)
appendix 管理者用
svnlook diff -r {revision_number} {repo_path} svnlook changed -r {revision_number} {repo_path} svnlook history -r {revision_number} {repo_path} {path_to_directory} svnlook youngest {repo_path}
diff : そのリビジョンで変更した各ファイルの変更内容(diff)の表示
changed:そのリビジョンで変更したファイルの一覧
history: {path_to_directory}のディレクトリでの変更履歴の表示
youngest: レポジトリ内の最新のリビジョン番号を表示
■
[DOM]
nodeValue = data
setAttribute() : node.setAttribute('align',val);
なぜsetTimeoutをclearしなければならないのか
var SlideManager = Class.create();
SlideManager.prototype = {
initialize : function() {
this.spans = ['span7-1'];
this.startSpan = 'span7-start';
this.endSpan = 'span7-end';
this.restricted = true;
this.range = $R(0,300);
this.slider = new Control.Slider('handle7-1', 'track7', this);
this.onStartBinded = this.onStart.bind(this);
this.onAddBinded = this.onAdd.bind(this);
Event.observe($('start'), 'click', this.onStartBinded);
},
onStart:function() {
this.intervalId = setInterval(this.onAddBinded, 10);
},
onAdd:function() {
this.slider.setValueBy(5);
if(this.slider.getNearlestValue >= 300) {
if(this.intervalId) clearInterval(this.intervalId);
delete this.intervalId;
}
},
onSlide:function(v){$('debug6').innerHTML='slide: '+v},
onChange:function(v){$('debug6').innerHTML='slide: '+v}
};
Class::Accessor
Can't use string ("A") as a HASH ref while "strict refs" in use at /usr/lib/perl5/site_perl/5.8/Class/Accessor.pm line 335.
Class::Data::Accessor
[Class A]
A->Data = A
[Class B inherit A]
B->Data = A
[create new A object : a]
A->Data = A
$a->Data = A
B->Data = A
[input object a->Data = a]
A->Data = A
$a->Data = a
B->Data = A
[create new B object : b]
A->Data = A
$a->Data = a
B->Data = A
$b->Data = A
[B->data = B]
A->Data = A
$a->Data = a
B->Data = B
$b->Data = B
[input object b->Data = b]
A->Data = A
$a->Data = a
B->Data = B
$b->Data = b
Class::Data::Inheritable
[Class A]
A->Data = A
[Class B inherit A]
B->Data = A
[create new A object : a]
A->Data = A
$a->Data = A
B->Data = A
[input object a->Data = a]
A->Data = a
$a->Data = a
B->Data = a
[create new B object : b]
A->Data = a
$a->Data = a
B->Data = a
$b->Data = a
[B->data = B]
A->Data = a
$a->Data = a
B->Data = B
$b->Data = B
[input object b->Data = b]
A->Data = a
$a->Data = a
B->Data = b
$b->Data = b
クラスのスタティック変数(継承クラス毎に存在する)