Githubに登録してみたので最初に使うgitコマンドを整理してみた。
Githubに登録してみました。
eclipse用のプラグインはまだ微妙という噂なので、コマンドラインのgitを入れて練習中です。
sshの公開鍵暗号を作って登録したり、Githubでリポジトリを作成するまでは、下記を参考にしました。
英語なんてわかんねーよ!!ってな人へ贈るGithub入門 for MacOS - Seasons.NET
その後、自分のPCで色々と使うgitコマンドの使い方で、ちょっと迷ったので整理してみます。
Githubでリポジトリを作成した時に表示されるイントロダクション
Global setup: Download and install Git git config --global user.name "Your Name" git config --global user.email foo@example.com Next steps: mkdir trial-repos cd trial-repos git init touch README git add README git commit -m 'first commit' git remote add origin git@github.com:kanonji/trial-repos.git git push origin master Existing Git Repo? cd existing_git_repo git remote add origin git@github.com:kanonji/trial-repos.git git push origin master Importing a Subversion Repo? Click here When you're done: Continue
git config --global user.name "Your Name"
ユーザー名を設定します。
Macの場合、何も設定してない状態だと、Macのユーザー名が使用されるようです。
グローバルな設定と、リポジトリ単位の設定とがあります。
グローバルとリポジトリ単位の設定を付け替えて動きを見てみました。
$ git config --global user.name #未設定なので何もなし $ git config user.name #未設定なので何もなし $ git config user.name kanonji #リポジトリにユーザー名を設定 $ git config --global user.name #グローバルは未設定のまま $ git config user.name #リポジトリには設定済み kanonji $ git config --unset user.name #リポジトリから削除 $ git config user.name #削除したので未設定 $ git config --global user.name kanonji #グローバルにユーザー名を設定 $ git config --global user.name #グローバルには設定済み kanonji $ git config user.name #グローバルの設定が引き継がれている kanonji $ git config --unset user.name #リポジトリから削除をしても・・・ $ git config --global user.name #グローバルの設定は消えない kanonji $ git config user.name #グローバルの設定は引き継がれたまま kanonji $ git config user.name foo #リポジトリに別名を設定 $ git config --global user.name #グローバルはkanonjiだけど・・・ kanonji $ git config user.name #リポジトリはfooになっている foo $ git config --global --unset user.name #グローバルから削除 $ git config --global user.name #削除したので未設定 $ git config user.name #リポジトリの設定は消えてない foo
git config --global user.email foo@example.com
メールアドレスを設定します。
Github上では見当たりませんでしたが、git lotで表示されるコミットログに記載されるらしいです。
同じくグローバルとリポジトリ単位で設定が可能で、多分細かい動きはuser.nameと同じだと思います。
git init
$ cd default/ $ git init Initialized empty Git repository in /Users/kanonji/Dev/git/default/.git/ $ ls -al total 0 drwxr-xr-x 3 kanonji staff 102 12 3 03:52 . drwxr-xr-x 5 kanonji staff 170 12 3 03:52 .. drwxr-xr-x 10 kanonji staff 340 12 3 03:52 .git
最初、勘違いしてしまいましたが .git ディレクトリは .svn のようなものではなく、これがリポジトリです。
.git があるdefaultがワーキングコピーになるので、ここにファイルを作成したりしていきます。
$ ls -al .git/ total 24 drwxr-xr-x 10 kanonji staff 340 12 3 03:52 . drwxr-xr-x 3 kanonji staff 102 12 3 03:52 .. -rw-r--r-- 1 kanonji staff 23 12 3 03:52 HEAD drwxr-xr-x 2 kanonji staff 68 12 3 03:52 branches -rw-r--r-- 1 kanonji staff 111 12 3 03:52 config -rw-r--r-- 1 kanonji staff 73 12 3 03:52 description drwxr-xr-x 12 kanonji staff 408 12 3 03:52 hooks drwxr-xr-x 3 kanonji staff 102 12 3 03:52 info drwxr-xr-x 4 kanonji staff 136 12 3 03:52 objects drwxr-xr-x 4 kanonji staff 136 12 3 03:52 refs $ cd ../with-bare/ $ git --bare init Initialized empty Git repository in /Users/kanonji/Dev/git/with-bare/ $ ls -al total 24 drwxr-xr-x 10 kanonji staff 340 12 3 03:52 . drwxr-xr-x 5 kanonji staff 170 12 3 03:52 .. -rw-r--r-- 1 kanonji staff 23 12 3 03:52 HEAD drwxr-xr-x 2 kanonji staff 68 12 3 03:52 branches -rw-r--r-- 1 kanonji staff 85 12 3 03:52 config -rw-r--r-- 1 kanonji staff 73 12 3 03:52 description drwxr-xr-x 12 kanonji staff 408 12 3 03:52 hooks drwxr-xr-x 3 kanonji staff 102 12 3 03:52 info drwxr-xr-x 4 kanonji staff 136 12 3 03:52 objects drwxr-xr-x 4 kanonji staff 136 12 3 03:52 refs
--bareオプションを使うと、ワーキングコピーのないリポジトリを作る事も出来ます。
ちょうど .git の中身をそのまま置いたような構成で、SVNのリポジトリとよく似ています。
でも多分ですが、これはGithubのような所で使うオプションで、ユーザーが操作するところは.gitリポジトリのある所だと思います。
分散バージョン管理なので --bareなリポジトリを使う時は、それをcloneして手元にもリポジトリを作るでしょうし。
--bareなリポジトリは .git という拡張子を付けるのが慣例となっているようです。
上記で言えば with-bare.git のようにすべきだったという事ですね。
Githubでリポジトリを作ると用意されるClone URLですが、末尾に .git が付いているので --bare なリポジトリという事になりそう。
git add README
コミットするファイルを指定します。
Subversionと違って、git add したファイルしかコミットされません。
このイントロダクションではREADMEファイルは新規に作ったファイルですが、
今後READMEファイルの内容を編集してコミットする場合も、まずは git add README をします。
つまり git commit をする前に、どれをコミットするかを選ぶ段階です。
HEADとワーキングコピーの間に索引(index)エリアがあり、文字通りコミットすべきファイルをindexに登録する作業。
git commit -m 'first commit'
コミットします。
-m はコミットのメッセージを付けるオプションで、省略してもエディタが起動して入力は求められます。
前述の通り git add をしてindexエリアに追加したものがコミットされます。
git commit -a
いちいち git add するのが面倒な場合は -a オプションを付けると git add をしなくてもコミットできます。
Subversionのコミットと同じような動きをし、変更されたファイルを自動検出して全てコミットします。
svn commit と同様に、バージョン管理されていない新規ファイルに関しては git add が必要です。
git remote add origin git@github.com:kanonji/trial-repos.git
リモートブランチに追加します。
実はリモートブランチという名前でいいのかちょっと確信持てないんですが、そう説明している所があったのでとりあえず。
これで origin という名前で git@github.com:kanonji/trial-repos.git リポジトリが追加されます。
git push origin master
origin にローカルのコミットなどの変更点を反映します。
origin とは上記で追加したリモートブランチの事なので git remote add foo などとしていれば git push foo master となります。
リモートブランチと書きましたが、この文脈では公開リポジトリと説明している所もありました。
Githubを使う場合は、ローカルにある自分のリポジトリと、Github上にある公開リポジトリという関係にもなり、originという命名が慣例のようです。
master は最初からあるブランチ名で、特にブランチを作っていなければ、常に master で作業します。