ページ

2010年9月28日火曜日

SVNで特定のファイルやディレクトリに対する履歴を完全に削除する方法

SVNで特定のファイルやディレクトリに対する履歴を完全に削除する方法。
つまりなかったことにする方法。

svnadmin dump /opt/svn/repos | svndumpfilter exclude 除外したいパス > dump.svn
rm -fr /opt/svn/repos/*
svnadmin create /opt/svn/repos/
svnadmin load /opt/svn/repos/ < dump.svn
Basic認証用のパスワードファイルの作成とユーザーの追加                      
cd /opt/svn/repos/conf/          
htpasswd -c -m mypasswd ユーザーID
HTTP接続用のディレクトリに権限を付与します。
chown -R apache.apache /opt/svn/repos
chmod -R 777 /opt/svn/repos/db
mkdir -p /opt/svn/repos/dav/activities.d
chmod -R 777 /opt/svn/repos/dav
apacheを再起動します。
/etc/init.d/httpd restart

2010年9月26日日曜日

git よく使うコマンド


■ 初期設定

・コミットログに追加される利用者の情報を設定する。
git config --global user.name "<ユーザーID>"
git config --global user.email "<メールアドレス>"
git config --global color.ui "auto"

・既存のリポジトリの複製を作る。
git clone <複製したいリポジトリのURL>


■ コミット・プッシュ・プル

・現在のワークツリーの状態を確認する。
git st

・ローカルのブランチにコミットする。
git add -A && git commit -m "コメント"

・コミットをリモートのブランチにプッシュする。
git push

・リモートの変更をローカルに取り込む
git pull



■ 元に戻す

・ワークツリーを HEAD の状態に戻す。
git reset --hard
git clean -fd

・ローカルブランチのコミットを取り消す
git revert <コミットID>

・リモートブランチのコミットを取り消す
git revert <コミットID>
git push

・リモートブランチのコミットを取り消して、別のリモートブランチにプッシュする
git co develop
git revert <コミットID>
git push
git co master
git cherry-pick <コミットID>
git push


■ ブランチ

・すべてのブランチを確認する。
git branch -a

・ローカルに新規ブランチを作成する。
git branch newbranch

・リモートに新規ブランチを作成する
git co -b develop origin/develop ← 作成元になるリモートブランチをチェックアウトする
(作成したブランチがチェックアウトされた状態となる)
git branch newbranch ← チェックアウトしたブランチから新規ブランチを作成する
git co newbranch
git push origin newbranch ← リモートにプッシュする
git fetch ← フェッチして、履歴を取得する
git co develop ← 作成したローカルブランチは、1のブランチを参照しているため、削除してリモートを参照し直す。
git branch -D newbranch
git co -b newbranch origin/newbranch

・ローカルのブランチを削除する
git branch -d newbranch

・ローカルが参照しているリモートブランチを削除する
git branch -r -d origin/newbranch

・リモートブランチを削除する
git push --delete origin newbranch


■ タグ

・すべてのタグを確認する。
git tag

・ローカルに新規タグを作成する。
git tag newtag

・リモートに新規タグを作成する
git co develop ← 対象のブランチをチェックアウトする
git tag newtag ← チェックアウトしたブランチから新規タグを作成する。
git push origin newtag ← リモートにプッシュする

・ローカルのタグを削除する。
git tag -d newtag

・リモートのタグを削除する。
git tag -d newtag
git push origin :newtag



■ マージ

・リモートに作成したブランチから、masterブランチにマージする。
git co master ← masterブランチをチェックアウトする
git merge origin/newbranch ← リモートのマージ元ブランチから、マージする。(fast forward)
(履歴を一本化したい場合は、以下でもOK)
git rebase origin/newbranch
git push ← プッシュする


■ コンフリクトとその解消
git status ← コンフリクトを起こしたファイルを確認する。
git add <ファイル名> ← コンフリクトを修正して、インデックスに追加する。



■ その他のTIPS
・直前のコミットのコメントを修正する
git commit --amend -m "コメント"

・Macの.DS_Storeファイルをignoreに設定する。
echo .DS_Store >> ~/.gitignore
git config --global core.excludesfile ~/.gitignore

・ファイルの1行1行がどのコミットで記録されたかを確認する。
git blame <ファイル名>

・コミット済みのファイルを、リポジトリから消して.gitignoreで除外する
git rm --cached foo.txt
echo 'foo.txt' >> .gitignore
git add .gitignore
git commit -m "コメント"


・ブランチを切り替える際に、既に変更があるとエラーになる為の対策
git stash ← 変更をいったん横に避けておく。
git stash pop ← 横に避けておいた変更を戻す。


・ブランチの作成/変更/マージ履歴を確認
git show-branch


・git では空のディレクトリをリポジトリに含めることはできない為の対策
mkdir empty_directory
touch empty_directory/.gitignore
git add empty_directory/.gitignore

・コミットの履歴の要約だけを確認する。
git log --pretty=short

・コミットごとの変更内容をunified-diffの形で見る
git log -p


・サーバーはsvnで、ローカルでのみgitを利用する
git svn clone <リポジトリのURL> -T trunk --username <ユーザーID> ← svnリポジトリからgitリポジトリを作る
git svn show-ignore >> .git/info/exclude ← svn:ignoreを引き継ぐ
git svn rebase ← svnリポジトリの最新の変更を取り込む。
git svn dcommit ← 変更をsvnにコミットする。

git svn dcommit --rmdir ← 空のディレクトリを削除する場合

git svn log ← svnの修正履歴を最終確認する。


2010年9月25日土曜日

SAStrutsで提供されているバリデーションの一覧

~ 必須チェック ~
・必須チェック
アノテーション → @Required
属性
msg エラーメッセージを指定する。
arg0 メッセージの最初の引数を指定する。デフォルトは、プロパティ名。
target 入力チェックを有効にするアクションの実行メソッドを指定する。

~ 相関チェック ~
・他のプロパティと関連したチェックを行う
アノテーション → @Validwhen
属性
test(必須) 条件を指定する。
msg エラーメッセージを指定する。
arg0 メッセージの最初の引数を指定する。デフォルトは、プロパティ名。
args メッセージの引数を @Argアノテーションの配列で指定する。
target 入力チェックを有効にするアクションの実行メソッドを指定する。

~ 文字数チェック ~
・最小文字数チェック
アノテーション → @Minlength
属性
test(必須) 文字列長の最小値を指定する。
msg エラーメッセージを指定する。
arg0 メッセージの最初の引数を指定する。デフォルトは、プロパティ名。
arg1 メッセージの2番目の引数を指定する。デフォルトは、minlength属性で指定した値。
target 入力チェックを有効にするアクションの実行メソッドを指定する。

・最大文字数チェック
アノテーション → @Maxlength
属性
maxlength(必須) 文字列長の最大値を指定する。
msg エラーメッセージを指定する。
arg0 メッセージの最初の引数を指定する。デフォルトは、プロパティ名。
arg1 メッセージの2番目の引数を指定する。デフォルトは、maxlength属性で指定した値。
target 入力チェックを有効にするアクションの実行メソッドを指定する。

~ バイト数チェック ~
・最小バイト数チェック
アノテーション → @Minbytelength
属性
minbytelength(必須) 最小バイト数を指定する。
msg エラーメッセージを指定する。
arg0 メッセージの最初の引数を指定する。デフォルトは、プロパティ名。
arg1 メッセージの2番目の引数を指定する。デフォルトは、minbytelength属性で指定した値。
target 入力チェックを有効にするアクションの実行メソッドを指定する。

・最大バイト数チェック
アノテーション → @Maxbytelength
属性
maxbytelength(必須) 最大バイト数を指定する。
msg エラーメッセージを指定する。
arg0 メッセージの最初の引数を指定する。デフォルトは、プロパティ名。
arg1 メッセージの2番目の引数を指定する。デフォルトは、maxbytelength属性で指定した値。
target 入力チェックを有効にするアクションの実行メソッドを指定する。

~ 正規表現チェック ~
・正規表現チェック
アノテーション → @Mask
属性
mask(必須) 正規表現を指定する。
msg エラーメッセージを指定する。
arg0 メッセージの最初の引数を指定する。デフォルトは、プロパティ名。
args メッセージの引数を @Argアノテーションの配列で指定する。
target 入力チェックを有効にするアクションの実行メソッドを指定する。

~ 範囲チェック ~
・数値がintの範囲内か否か
アノテーション → @IntRange
属性
min(必須) 最小値を指定する。
max(必須) 最大値を指定する。
msg エラーメッセージを指定する。
arg0 メッセージの最初の引数を指定する。デフォルトは、プロパティ名。
arg1 メッセージの2番目の引数を指定する。デフォルトは、min属性で指定した値。
arg2 メッセージの3番目の引数を指定する。デフォルトは、max属性で指定した値。
target 入力チェックを有効にするアクションの実行メソッドを指定する。

・数値がlongの範囲内か否か
アノテーション → @LongRange
属性
min(必須) 最小値を指定する。
max(必須) 最大値を指定する。
msg エラーメッセージを指定する。
arg0 メッセージの最初の引数を指定する。デフォルトは、プロパティ名。
arg1 メッセージの2番目の引数を指定する。デフォルトは、min属性で指定した値。
arg2 メッセージの3番目の引数を指定する。デフォルトは、max属性で指定した値。
target 入力チェックを有効にするアクションの実行メソッドを指定する。

・数値がfloatの範囲内か否か
アノテーション → @FloatRange
属性
min(必須) 最小値を指定する。
max(必須) 最大値を指定する。
msg エラーメッセージを指定する。
arg0 メッセージの最初の引数を指定する。デフォルトは、プロパティ名。
arg1 メッセージの2番目の引数を指定する。デフォルトは、min属性で指定した値。
arg2 メッセージの3番目の引数を指定する。デフォルトは、max属性で指定した値。
target 入力チェックを有効にするアクションの実行メソッドを指定する。

・数値がdoubleの範囲内か否か
アノテーション → @DoubleRange
属性
min(必須) 最小値を指定する。
max(必須) 最大値を指定する。
msg エラーメッセージを指定する。
arg0 メッセージの最初の引数を指定する。デフォルトは、プロパティ名。
arg1 メッセージの2番目の引数を指定する。デフォルトは、min属性で指定した値。
arg2 メッセージの3番目の引数を指定する。デフォルトは、max属性で指定した値。
target 入力チェックを有効にするアクションの実行メソッドを指定する。

~ 型チェック ~
・byteに変換可能か否か
アノテーション → @ByteType
属性
msg エラーメッセージを指定する。
arg0 メッセージの最初の引数を指定する。デフォルトは、プロパティ名。
target 入力チェックを有効にするアクションの実行メソッドを指定する。

・shortに変換可能か否か
アノテーション → @ShortType
属性
msg エラーメッセージを指定する。
arg0 メッセージの最初の引数を指定する。デフォルトは、プロパティ名。
target 入力チェックを有効にするアクションの実行メソッドを指定する。

・integerに変換可能か否か
アノテーション → @IntegerType
属性
msg エラーメッセージを指定する。
arg0 メッセージの最初の引数を指定する。デフォルトは、プロパティ名。
target 入力チェックを有効にするアクションの実行メソッドを指定する。

・longに変換可能か否か
アノテーション → @LongType
属性
msg エラーメッセージを指定する。
arg0 メッセージの最初の引数を指定する。デフォルトは、プロパティ名。
target 入力チェックを有効にするアクションの実行メソッドを指定する。

・floatに変換可能か否か
アノテーション → @FloatType
属性
msg エラーメッセージを指定する。
arg0 メッセージの最初の引数を指定する。デフォルトは、プロパティ名。
target 入力チェックを有効にするアクションの実行メソッドを指定する。

・doubleに変換可能か否か
アノテーション → @DoubleType
属性
msg エラーメッセージを指定する。
arg0 メッセージの最初の引数を指定する。デフォルトは、プロパティ名。
target 入力チェックを有効にするアクションの実行メソッドを指定する。

・日付チェック
アノテーション → @DateType
属性
datePattern 日付のパターンを指定する。
datePatternStrict 厳密な日付のパターンを指定する。(yyyy/MM/dd)のように指定する。
msg エラーメッセージを指定する。
arg0 メッセージの最初の引数を指定する。デフォルトは、プロパティ名。
target 入力チェックを有効にするアクションの実行メソッドを指定する。

・クレジットカード形式かどうかチェック
アノテーション → @CreditCardType
属性
msg エラーメッセージを指定する。
arg0 メッセージの最初の引数を指定する。デフォルトは、プロパティ名。
target 入力チェックを有効にするアクションの実行メソッドを指定する。

・メールアドレス形式かどうかチェック
アノテーション → @EmailType
属性
msg エラーメッセージを指定する。
arg0 メッセージの最初の引数を指定する。デフォルトは、プロパティ名。
target 入力チェックを有効にするアクションの実行メソッドを指定する。

・URLの形式かどうかチェック
アノテーション → @UrlType
属性
allowallschemas すべてのスキームを許可するかどうかを指定する。デフォルトはfalse。
allow2slashes ダブルスラッシュ(//)を許可するかどうかを指定する。デフォルトは、false。
nofragments URLの分割(#を含める)を許可しないかどうかを指定する。デフォルトは、false。
schemas 許可するスキームを指定する。複数ある場合は、(カンマ)で区切って指定する。
msg エラーメッセージを指定する。
arg0 メッセージの最初の引数を指定する。デフォルトは、プロパティ名。
target 入力チェックを有効にするアクションの実行メソッドを指定する。


2010年9月14日火曜日

OAuth認証の仕組みについて

近年、マッシュアップと呼ばれる仕組みが流行しており、
既存のWebサービスが次々とつながり、新たなWebサービスが登場している。
しかし、メールアドレスなど重要な個人情報が意図せずに「つながれてしまう」可能性もある。
そこで登場したのがアクセス権の「委譲」を目的としたプロトコル、OAuthです。

■ OAuth認証(オーオース)
~ 自分のアカウントへのアクセスを、ID・パスワードを渡さずに
第三者のサービスから利用できるようにする仕組み。





【事前準備】
・Consumer登録
1.事前にProviderにConsumer登録をしておく。
2.登録すると、Consumer KeyとConsumer Secretが発行される。
3.Consumer KeyとConsumer Secretは、以降のOAuth認証で使用する。


【OAuth認証の流れ】
・ユーザは、ConsumerにOAuth認証を行うように指示する。
1.通常は、Consumerのページにあるログインボタンなどをクリック。

・Consumerは、Providerからリクエストトークンを取得する。
1.Consumerは、ProviderへHttp通信でリクエストトークンを要求する。
(その際に、事前に発行されているConsumer Keyと、Consumer Secret
の値をパラメータとして付与します。)
2.ProviderはHttpのレスポンスとしてリクエストトークンを返す。

・認証用URLへのリダイレクト・ユーザ承認
1.Consumerは、発行されたリクエストトークンをURLに付与して、
Providerの認証用URLへリダイレクトを行う。
2.リダイレクト先で、Providerがユーザに対して、
Consumerが要求しているOAuth認証によるAPI利用を許可するか選択します。
3.承認した場合は、Providerは(通常は)Consumer登録時に設定した
コールバックURLへリダイクレトする。

・アクセストークンの取得
1.コールバックURLへのリダイレクトで、Consumerはリクエストトークンを
もとにアクセストークン取得をHttp通信でProviderへ要求する。
2.アクセストークン取得要求は、Consumer Keyとリクエストトークンなどを
パラメータに付与して呼び出す。(通常はAuthorizationヘッダに設定)
3.アクセストークン取得要求のパラメータも、Consumer Secretで署名した
値を付与する。
4.Providerは、レスポンスとしてアクセストークンを返す。

・OAuthでのAPI呼び出し
1.実際のAPI呼び出しは、取得したアクセストークンをパラメータに
付与して呼び出す。
2.アクセストークンとConsumer Key、およびパラメータをConsumer Secretで
署名した値を、Authorizationヘッダに設定に設定してAPIを呼び出すことで、
OAuth認証を利用したAPI呼び出しができる。


GIT(分散型バージョン管理システム)の特徴

Git(ギット)とは、
~ ソースコードの分散型バージョン管理システム。
動作速度に重点が置かれており、分散されたレポジトリがローカルマシンに
置かれている為、ネットにつながっていなくてもソースをコミットできる。


■ 集中管理方式のバージョン管理システム
~ サーバ上にだけリポジトリを持ちます。




■ 分散管理方式のバージョン管理システム
~ サーバ上のリポジトリ以外にも各開発者がローカルリポジトリを持ちます。




【分散型のメリット】
・一時的作業の履歴管理が容易
~ 各開発者の作業は、ローカルリポジトリへコミットすることになる為、
中央リポジトリに影響を与えることなく各開発者が変更を管理できる。

・柔軟なワークフロー
~ リポジトリ構成を階層化し、各グループのリポジトリ上の変更をリーダーが確認して、
上位のリポジトリへプッシュするという使い方ができる為、
各開発者が勝手にマスターのリポジトリへコミットするのを避けることができる。

・パフォーマンスとスケーラビリティ
・オフラインによる開発
・障害に強い
・オープンソースの改編物の公開に最適
・SVNを集中リポジトリとして利用可能


【分散型のデメリット】
・管理が煩雑に
・ロックができない
・細かいアクセス制御ができない
・リポジトリ単位しか作業セットを取得できない
・Windows用のツールが成熟していない
・一般開発者向けのノウハウが十分に蓄積されていない
・利用経験があるエンジニアを集めにくい


分散型のバージョン管理システムでは、下記のような使い方が出来る。
※ また、中央リポジトリにSVNを利用する事ができる。