Git をさわる機会が増えてきたので Subversion ユーザ目線で説明してみる

No Photo

社長におねだりしたらベイスターズ買ってくれないかなぁ。どうもこんにちは nakamura です。

シーブレインでは今も昔もソース管理に Subversion を使い続けていますが、最近は協力会社さんとのやり取りなどで何かと Git にさわる機会が増えてきました。最初はチンプンカンプンでしたが、ようやく何となく基本的な部分が分かってきたので、Subversion ユーザ的な目線でちょこっと説明してみたいと思います。

コマンド例

初期設定

Git ではユーザ毎の設定内容も git コマンドで操作します。とりあえずいつも以下のような感じで設定してます。diff に使うコマンドとかも指定できるみたいですね。

# 名前
git config --global user.name "Tadashi Nakamura"
# メールアドレス
git config --global user.email [email protected]
# 色設定
git config --global color.ui auto
# 設定内容確認
git config --list

あと長ったらしいサブコマンドにエイリアスを設定できたります。

# だいたいこんな感じ
git config --global alias.co checkout
git config --global alias.ci commit
git config --global alias.st status
git config --global alias.br branch

リポジトリを作る

Subversion でいう svnadmin create ですね。

git init --bare /path_to_repos/MyRepos.git

なくてもいけるのかどうかは分かりませんが、リポジトリのディレクトリ名は .git で終わるのが慣例のようです。

リポジトリのコピーをローカルに作成する

git clone [email protected]:/path_to_repos/MyRepos.git working_dir

git init で作ったベアリポジトリのコピーをローカルに作成します。ローカルにもリポジトリができる、というのは Subversion にはない概念ですが、あえて言うなら svn checkout と同様の役割と言えます。(ローカルリポジトリと一緒にバージョン管理されているソースコードも展開されるので)

今いるブランチのコピーを作成する

svn copy ですね。あくまでローカルリポジトリ内でコピーされるだけで、プロジェクト全体で共有されるものではありません。

git branch new_branch

リモートリポジトリからブランチをコピー、作成する場合は以下です。

git branch new_branch origin/new_branch

今いるブランチを切り替える

git checkout another_branch

最初これややこしかったー!svn checkout と全然意味違うんだもん!実際は svn switch と同じですね。

ちなみに -b オプションをつけると、git branch と git checkout を同時に実行してくれます。以下は、リモートから another_branch のコピーを作成して、そのまま切り替えちゃうコマンド例です。

git checkout -b another_branch origin/another_branch

コミット待ちに追加する

svn add と同じですね。唯一と言っていいほど全く同じです。-A オプションで全てのバージョン管理されていないファイルがコミット待ち状態になります。

git add -A

コミットする

Git でいうコミットはローカルリポジトリに対して変更点を記録するだけで、この時点ではまだ変更点は他のプロジェクトメンバーに共有されません。この辺りの概念も最初ややこしかった・・・。

git commit -a

マージする

例えば develop ブランチから分岐した nakamura ブランチで作業を進めて、ひとつの機能が完成したとします。これらの変更点を develop ブランチにマージするには以下のコマンドを実行します。

# develop ブランチに切り替え
git checkout develop
# nakamura ブランチをマージ
git merge nakamura

ローカルリポジトリに溜まった変更点をリモートリポジトリに適用

svn commit により近いのはこちらでしょうか。ちなみに『今いるローカルブランチの変更点』を『同名のリモートブランチ』に対して適用します。

git push

全部のブランチを push するには --all オプションをつければいいのかな?(やった事ないです)

リモートにある変更点をローカルに適用する

svn update ですね。

git pull

pull してきた変更点を作業中のブランチに適用する

一種のマージですが、厳密に言うと『ブランチの分岐点を一番新しいコミットに移動する』というようなイメージでしょうか。

# 作業中のリポジトリに切り替え
git checkout nakamura
# develop ブランチを取り込む
git rebase develop

よく使う基本的な機能はこんな所でしょうか。まだまだ Git 初心者なのでおかしな点ありましたら、バシバシ指摘してやってください~。

終わりに

Subversion ユーザ的に一番ややこしいのが、リモートとローカル両方にリポジトリがある事だと思います。リモートリポジトリとのやり取りは基本的に push と pull だけ、それ以外のコマンドは基本的にローカルリポジトリ内での出来事、という辺りが分かってくると大分使いやすくなってきます。

まぁ色々ややこしくて覚える事も多いけれど、それを補って余りある点がひとつ・・・。とにかく速いよ!!!

  • このエントリーをはてなブックマークに追加

この記事を読んだ人にオススメ