Git / Subversion用語コマンド比較
.Github使い出したのはいいけど、Git自体の用語があんまりわかってなかったので、調べてみた。
せっかくなので、書き記します。
GitとSubversionの違いは
そもそもリポジトリとは、更新履歴が保存できる特殊な仕組みのディレクトリのようなもの。
SVNは単一、Gitは分散。(分散型はGitの他にMercurialやSVKでも使われている)
- Subversionの場合はリポジトリは1つ。各々が1つのリポジトリに対して更新。ローカルには特定バージョンが、ワーキングコピーとしてファイルが保存される。
- Gitの場合はリポジトリが分散。各自が持てる。(作業ディレクトリそのものが、ローカルリポジトリになる。)
- Gitの場合は、分散型なのでメインとなるマスタリポジトリが消滅しても安心。
- SVNだと、各フォルダに隠しフォルダ「.svn」が作成されてしまう。うっとおしい。
Gitの場合は、親フォルダにのみ隠しフォルダ「.git」が作成される。 - SVNでできていた連番のリビジョン番号での管理がGitではできなくなる。
- Gitはコミットはローカルリポジトリに対してだからスピーディ。
コマンド比較表
自分なりにまとめました。間違ってるかもしれません。
(Subversionのコマンドは空欄が多いですが、GUIのツールを普段使ってたからコマンドを知らんのです。。。)
Git | Subversion | |
---|---|---|
リポジトリを作る | git init –bare | svnadmin create |
ローカルにもってくる | git clone 〜〜〜〜 (SVNと違い、ローカルにリモートリポジトリの複製をつくる) |
checkout |
ローカルリポジトリ内でコピー (ブランチを作る) |
git branch 新しいブランチ名 | copy |
ローカルリポジトリのブランチを調べる | git branch | |
ブランチを切り替える | git checkout 切り替え先のブランチ名 (SVNのcheckoutとは意味が違うので注意) |
switch |
ブランチをマージする | git merge マージしたいブランチ名 (メインブランチにて実行する) |
|
コミットできる状態にする | git add ファイル名 (commitにaオプションを付けると、addしなくてよい 「git commit -am “コメント”」) |
add |
addを取り消す | git rm –cached ファイル名 | |
コミットする | git commit -m “コメント” (ローカルリポジトリにコミットする) |
commit (リモートリポジトリにコミットする) |
直前のコミットをやりなおす | git commit –amend (コメントミスや、add忘れ等のために使用) |
|
コミットを取り消す | git reset –hard (更新ファイルも元に戻す) git reset –soft HEAD^ (更新ファイルはそのまま。 「HEAD^」は直前のコミットの事) |
|
ローカルリポジトリの変更を リモートリポジトリに反映 |
git push (リポジトリ間の同期のようなもの?) |
commit |
リモートリポジトリの更新をローカルに反映 | git pull | update |
最新コミットとして、マージする? | rebase | |
コミットログをみる | git log | |
変更ファイルをチェック | git status | |
diffする | git diff ファイル名 |
コミットまでの一連の流れ
cd ~/リポジトリ echo "test" > test.txt git add test.txt git commit -m "テストファイルをコミットします"
ブランチのマージテストしてみたが、コンフリクトが生じた時は、修正メッセージが現れて自動的に追記された。
が、コンフリクト時の上手な解消方は未だわからない。
それ以外のGitならではのメモ
リポジトリを保管するディレクトリ名は「~/hogehoge.git」という具合に、“拡張子を「.git」”とするのが風習がある。