勉強と備忘録として
前提
SSHでログインできるサーバーに中央リポジトリを置き、リモートで作業するモデルを想定。
- サーバー:servername.hoge.jp
- Subversionリポジトリ /path/to/repos
- Gitリポジトリ /path/to/repos.git
- クライアント
- 作業ディレクトリ /path/to/works
リモートリポジトリの作成
Subversionコマンド
サーバーにて % svnadmin create /path/to/repos
クライアント側にて % cd /path/to/ % svn import works svn+ssh:///servername.hoge.jp/path/to/repos/works -m "Comment"
Gitコマンド
サーバーにて(参考: Gitリモートリポジトリ構築 CapmNetwork)
% mkdir /path/to/repos.git % cd /path/to/repos.git % git --bare init --share
クライアント側にて
% cd /path/to/works % git init % git add . % git commit % git remote add origin ssh://username@servername.hoge.jp/path/to/repos.git (サーバ名の後ろは絶対パスで指定すること) % git push origin master
日常作業
元ネタ:cyclogy:gitとsubversionのコマンド対応表
操作目的 | subversion | git |
作業ディレクトリ作成 | svn checkout |
git clone |
更新 | svn update | git pull = git fetch + git marge (参考) |
コミット | svn commit | git add |
管理対象に追加 | svn add |
git add |
管理対象から除去 | svn rm |
git rm |
移動 | svn mv |
git mv |
変更取り消し | svn revert |
git checkout |
ログ | svn log | git log |
差分 | svn diff | git diff |
ブランチの切り替え | svn switch (このコマンド知らなかった) | git checkout |
状態確認 | svn status | git status |
ブランチ作成 | svn copy |
git branch |
タグ作成 | svn copy |
git tag |
マージ | svn merge -r |
git merge |
リポジトリの最適化 | -- | git gc |
エクスポート | svn export | git archives |
変更履歴の可視化 | -- | git log --graph (参考, .gitconfig) |
ローカルリポジトリとリポートリポジトリの関連付け
Subversionになく、Git特有の話
ローカルリポジトリにリポートリポジトリを別名登録
servername.hoge.jというマシンの/path/to/repos.gitというリモートリポジトリをローカルのリポジトリへoriginという名前で登録
% git remote add <alias_name> <url_of_remote_repository> % git remote add origin ssh://username@servername.hoge.jp/path/to/repos.git % git push origin master (ローカルリポジトリのmasterをoriginへ反映させる) % git pull origin (originの変更をmasterへ反映させる)
登録済みのリポートリポジトリのURLを変更する
% git remote set-url <alias_name> <url_of_remote_repository> % git remote set-url origin ssh://username@servername.hoge.jp/path/to/repos.git
ブランチの削除
ローカルとリモートにあるブランチ bug_92 が役割を終えたので削除するとき以下のようにする。
% git branch bug_92 dev * master % git branch -d bug_92 (ローカルを削除) % git push origin :bug_92 (リモートを削除)
ローカルの変更をなしにして、リモートの変更を全部ローカルに反映させる
% git checkout HEAD % git pull origin master (リモートリポジトリoriginのmasterブランチの内容をfetchしてmergeする)