githubを使ってみる
gitに慣れないので、使っておこう。
githubというところにアカウントを作った。
ローカルだけだと、やはりわからないことがあるのよねぇ。
作ったといっても、ずいぶん前だ。
もしかすると、ここにも書いたかもしれない。
が、すっかり忘れてしまった。
というわけで、ここは「githubのアカウントをずいぶん前に作ったけど忘れてしまった人へ」ということで。
まず、ブラウザでgithubのサイトにアクセス。
そして自分のアカウントでログイン。
ここまではできないと、いかん。
まずはソースを持ってくるところから。
ログインすると、Public Repositoriesという欄にリポジトリが出ているので、選択。
そうすると、画面の真ん中くらいにテキストボックスがある。
そこに「git@github.com:XXXXX」というようなのが書いてある。
それを使えば、落とすことができる。
cygwinとかで、git clone。
$ git clone git@github.com:XXXX
そのまま打てばよい。
ここで注意するのは、実行するディレクトリ。
git cloneすると、ディレクトリをリポジトリ名で作ってくれるようだ。
だから、git initとかはしなくていい。
SVNでいうところのチェックアウトにあたる操作だな。
実行すると、まずsshキーのパスワードを訊かれる。
なので、それは思い出せないといかん。
思い出せないようなら、作り直せばよいのかな。
私は幸い思い出すことができた。
git branchで見ると、masterになっていた。
githubのサイトに「Switch Branches」というのがあり、ブランチを見ることができる
当時の私は、2つのブランチを作っていたようだ(masterとbranch3)。
選んでみよう。
$ git checkout branch3Branch branch3 set up to track remote branch branch3 from origin.
Switched to a new branch 'branch3'
切り替わったようだ。
確認しよう。
* branch3
master
もしかすると、checkoutはブランチがなければ勝手に作ってしまうのでは?
心配になったので試してみよう。
error: pathspec 'branch4' did not match any file(s) known to git.
よし、大丈夫だ。
checkoutすると、ソースの中身がいきなり切り替わるので、すこし驚く。
ファイルの変更をしただけのままcheckoutするとエラーになる。
error: You have local changes to 'XXXXXX'; cannot switch branches.
XXXXXXはファイル名ね。
なので、commitするなり破棄するなりせねばならぬ。
そのファイルを削除すると、checkoutできた。
そしてまたcheckoutして戻ると、ファイルが復元されていた。
ふーん。
git stashを使うと、変更を保持してくれるらしい。
今のところファイルが1つしかないので、よくわからん。
追加しておこう。
$ vi NOTE
$ git commit -a
# On branch master
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
# NOTE
nothing added to commit but untracked files present (use "git add" to track)
これはだめみたいだ。
新規のファイルは、addが必要みたい。
$ git add *
よかった、ワイルドカードは使えるんだ。
Linuxは(bashは?)、*をファイル名に自動的に展開してくれるから問題ないのかな。
$ git commit
ちなみに、cygwinだとviが立ち上がるようだ。
$ git checkout branch3
lsで見ると、NOTEはなくなっている。
新規作成してaddもcommitもしなかったファイルはどうなるのだろう?
$ git checkout master
Switched to branch 'master'
Your branch is ahead of 'origin/master' by 1 commit.
lsで見ると、TESTは残っている。
まあ、消える理由はないわな。
checkoutの最後に出ているメッセージは「origin/masterよりもあんたのブランチの方が進んでますよ」ということか。
origin/masterはgithubにあるリポジトリを指しているのだろう。
$ git push
sshのパスワードを訊かれるので、書くと転送される。
branch3の中身とmasterの中身に違いがあるな・・・。
マージを使ってみよう。
Merge made by recursive.
README | 1 +
1 files changed, 1 insertions(+), 0 deletions(-)
READMEってファイルに差分があったのだが、マージしてくれたようだ。
コンフリクトとかもするのだろうね。
Updating 7d18de0..e743a44
Fast-forward
NOTE | 2 ++
README | 2 +-
2 files changed, 3 insertions(+), 1 deletions(-)
create mode 100644 NOTE
意図してコンフリクトさせるのは難しいな・・・。
mergeすると、存在しないファイルの追加も行ってくれるようだ。
あとはタグくらいか?
タグも、githubから見られる。
コマンドなら、
B3-FORTH
FIRST
SECOND
THIRD
うん、記憶にない。
さっきコミットしたので、タグ名を付けてみよう。
tagは今の状態にタグ名を付けるのではなく、最後に行ったコミットに対して名前を付けるらしい。
$ git tag MERGE-master
では、試しに古いタグ名のものを引っ張ってきてみよう。
$ git checkout SECONDNote: moving to 'SECOND' which isn't a local branch
If you want to create a new branch from this checkout, you may do so
(now or later) by using -b with the checkout command again. Example:
git checkout -b <new_branch_name>
HEAD is now at 079cb12... second
親切に、ブランチを作りたいんなら-bをつけるんだよ、とコメントが出てきた。
まあ、今回は作らないよ。
試しにもう一度やってみよう。
Previous HEAD position was 079cb12... second
HEAD is now at 0df2178... third
あ、コメントが違う。
どうも、ブランチを切り替えた後にタグでcheckoutすると出てくるようだ。
あせるではないか。
もちろん、タグ名もpushしないとgithubに反映されない。
pushすれば、反映されるはず。
・・・されない。
なんでだ?
* (no branch)
branch3
master
no branch ?
どうやら、タグでcheckoutするとそうなるらしい。
ふーん。
では、どうやってタグ名をアップするかというと、--tagsオプションらしい。
$ git push --tags
うん。githubにも反映された。
取ってくるときは、pull --tagsらしい。
さて、repo syncで取ってきたときも、no branchになっている。
名前を付けないと不便だ。
$ repo start master --all
やはりmasterという名前がしっくりくるな。
変更するので、もう1つブランチを切っておく方がいいだろう。

最近のコメント