元々svn歴1年間、今のところgit歴約1週間くらいです。
gitを使用する目的は、
・個人的な、ソースコードのバージョン管理(開発に使用するPCが多いため)
・さくらレンタルサーバーにsvnを導入するのはめんどくさそう
・使っている人が多そう
程度です。
今のところ、第1の目的は果たしているので、初心者による初心者なりのメモです。
間違っている可能性も高いです。
下記のメモの簡単な補足
- sshのconfigに、sakuraというホストを登録しています
- セットアップ例は、こちらに
- リモートのリポジトリは、~/git/repos.git/
- ローカルのリポジトリは、~/local/git/
- リモートはさくらのレンタルサーバー、ローカルはCygwin環境
まず最初にローカルに複製
ローカルリポジトリを複製しています。
複製例なので、出来立て空っぽのリポジトリです(Warningはそれが原因)。
$ cd ~/local/git/
$ git clone sakura:~/git/repos.git .
Cloning into '.'...
warning: You appear to have cloned an empty repository.
Checking connectivity... done.
最初のコミット
空っぽのREADMEファイルを作成してコミットし、プッシュしておきます。
$ touch ERADME
$ git add README
$ git commit -m "最初のコミット"
[master (root-commit) ***] 最初のコミット
1 file changed, 0 insertions(+), 0 deletions(-)
create mode *** README
これで、ブランチを確認すると、以下のようになります。
$ git branch
* master
ローカルのブランチでの編集
gitがsvnと異なる特徴の一つが、
「コミットをローカルで行うことができる」
だと思っています。
なので、リモートのmasterリポジトリを毎回書き換えるのではなく、ローカルにlocalというブランチを作成し、区切りが良いところでmasterに合流させる、という方法を取ります。
まずは、ローカルブランチlocalの作成
$ git branch local
ブランチを確認すると以下のように増えています。
$ git branch
local
* master
ここで、ローカルブランチに切り替えます。
$ git checkout local
Switched to branch 'local'
あとは、以下のように色々と変更を加えてコミットしていった後とします。
$ git branch
* local
master
$ git log
commit ***
Author: user <mail>
Date: ***
index.phpの編集
commit ***
Author: user <mail>
Date: ***
index.phpの作成
commit ***
Author: user <mail>
Date: ***
最初のコミット
この時点でmasterリポジトリに切り替えると、以下のように変更点に差が発生しています。
$ git checkout master
Switched to branch 'master'
Your branch is based on 'origin/master', but the upstream is gone.
(use "git branch --unset-upstream" to fixup)
$ git show-branch
! [local] index.phpの編集
* [master] 最初のコミット
--
+ [local] index.phpの編集
+ [local^] index.phpの作成
+* [master] 最初のコミット
そこで、masterブランチに、localブランチの変更点をマージさせます。
(マージという単語の使い方が正しくないかもしれませんが)
$ git merge local
Updating ***
Fast-forward
index.php | 2 ++
1 file changed, 2 insertions(+)
create mode *** index.php
すると、両方のブランチの変更点が一緒になっていることが分かります。
ここで、リモートリポジトリにmasterリポジトリをプッシュしておきます。
$ git show-branch
! [local] index.phpの編集
* [master] index.phpの編集
--
+* [local] index.phpの編集
$ git push origin master
Counting objects: 8, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (5/5), done.
Writing objects: 100% (8/8), 739 bytes | 0 bytes/s, done.
Total 8 (delta 0), reused 0 (delta 0)
To sakura:~/git/repos.git
* [new branch] master -> master
この時点でタグを追加したい場合は以下とします。
タグv0.01を作成して、タグ一覧をリモートリポジトリにプッシュしています。
$ git tag v0.01
$ git push origin --tags
Total 0 (delta 0), reused 0 (delta 0)
To sakura:~/git/repos.git
* [new tag] v0.01 -> v0.01
別のローカル環境での同期
先ほどは、masterリポジトリにlocalリポジトリをマージしていました。
別のローカル環境では、最初にmasterリポジトリに変更点を反映させる必要があるため、以下のようにします。
ここでは、masterリポジトリにチェックアウトしてから、リモートから変更点を反映しています。
$ git checkout master
$ git fetch
$ git merge
そして、masterブランチからlocalブランチにマージすれば完了です。
$ git checkout local
$ git merge master
よく使っているコマンドダイジェスト
基本的に、以下のコマンドですべて事足りているのと、今後も事足りそうです。
個人的にしか使っていないので、今のところ今後も増えそうに無いです。
グループで管理する必要がある場合には、色々とセオリーの勉強が必要になりそう。
- git checkout local で、localブランチにチェックアウト
- git add と git rm と git mv で、各種ファイルの追加や削除、移動
- git commit -m “コメント” でコメント付きでコミット
- git push origin master で、masterブランチをプッシュ
- git fetch からの git merge:リモートリポジトリから変更点を反映
- git branch で現在のブランチの確認
- git show-branch で、各ブランチの情報
- git status で現在の状態確認
- git diff で直後のコミットとの差分表示(コミット前)