共有リポジトリ → ローカルリポジトリ
(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」