cafegale(LeafCage備忘録)

LeafCage備忘録(はてなダイアリー)と統一しました。

git svn

共有リポジトリ → ローカルリポジトリ
(Subversion)     (Git)
    git svn fetch

共有リポジトリ →→→→→→→→→→→→→→→→→→ 作業ツリー
    git svn rebase (svn update相当)


共有リポジトリ ← ローカルリポジトリ ← インデックス ← 作業ツリー
(Subversion)     (Git)
    git svn dcommit      git commit       git add

コマンド 効果 補足
git svn clone {svn_URL} svnリポジトリをgitローカルリポジトリに変換 git svn clone --prefix svn/ -s file:///repos/svn :-sオプションでsvnのtrunk*1を、gitのmasterブランチのリモートトラッキング先に自動的に設定する。これにコミットする時は直接コミットはNG。必ず別ブランチからmarge --squashでマージすべし*2:--prefixオプションでブランチ名をsvn/trunkにする*3
git svn info 現在のブランチが参照するsvnリポジトリの情報を確認
git svn branch {branch-name} svnリポジトリtrunkを元にしてsvnリポジトリのbranches/配下にブランチを作成 Gitリポジトリ上ではリモート追跡ブランチとして管理される。"git checkout -b {branchname} --track {svn_branchname}"←ローカルでの変更をコミットするためのブランチを作る
git svn tag {tag-name} svnリポジトリにtagを作成
git svn log svnリポジトリsvn形式ログを出力(git logと形式が異なるのみ)
git svn dcommit ローカルリポジトリへのコミットをsvnにコミットする(git push的な) --intaractiveオプションでコミットごとにSubversionリポジトリに送信するかを確認
git svn fetch svnリポジトリの更新情報をgitリポジトリに取り込む その後git svn rebaseを使用しないと実際にローカルブランチが更新されることはない
git svn rebase git svn fetchで取得したコミットを適用 fetchなしでrebaseでも更新適用できる(svn update相当)が、作業中の場合にはfetchで確認してからの方がよい
git rebase {master} 更新されたmasterブランチをトピックブランチに取り込む時はmargeではなくrebaseを使うべき masterブランチを、トピックブランチに取り込む時には、 絶対 に git rebase master で:git-svnを使うときのベストプラクティス - Life goes on
git svn proplist {repository/dir/file} svnリポジトリに設定されている属性を一覧 git svn proplist public/favicon.ico :このファイルに設定されている属性を一覧
git svn propget {svn属性値} svnリポジトリの特定の属性値を確認 [git svn propget svn:mime-type public/favicon.ico]でpublic/favicon.icoに設定されている属性svn:mime-typeの値を表示
git svn show-ignore 無視ファイル設定*4を一覧
git svn create-ignore git svn show-ignore情報を元に.gitignoreファイルを生成*5 svnリポジトリ上でsvn:ignoreが設定されていてもgitリポジトリでは有効にならないため
git svn show-externals svn属性(svn:externals)で指定された外部リポジトリの参照を表示

git内でブランチをmasterにmergeする時の注意点

--no-ffオプションを付けること。さもなくばmasterブランチのdcommit先がmasterブランチではなくなってしまう

git checkout master
git merge --no-ff hotfix123
git svn dcommit //svnのtrunkにコミットされる

*1:svnリポジトリが標準的な構成(trunk、branches、tags)になっているとき

*2:svnがremoteになってるブランチは 絶対 に直接コミットなどしない:git-svnを使うときのベストプラクティス - Life goes on

*3:git svn cloneをやるときは--prefix svn/をつけるべき - DQNEO起業日記

*4:svnでは.vitignoreの代わりにsvn属性(svn:ignore)で設定する

*5:git svn dcommitするとsvnリポジトリに.gitignoreが追加されてしまう。それが嫌なら.git/info/excludeファイルに指定する「git svn show-ignore > .git/info/exclude」