Git

出典: Myun2Wiki

目次

gitとsubversionは何が違うんや。

gitもsubversionも、何も違わない。どっちもバージョン管理のためのソフトウェアである。

gitは、subversionと比べたら、ちょっと羽の生えたような物。色々なサイトを巡ってみると、なんだかとても大層なもので、 まったく別次元、イチから考え方を再構築しなければいけない様に思えてくるがそんな事はない。 むしろ、subversion等の既存のバージョン管理ツールをベースに考えた方が分かりやすい、とすら、今の私には思えてくる程である。

まずはsubversionベースで考えてみる

基本的にgitは、subversionで出来る事は全て出来る。まずは、そのレベルに立って考えてみるのが望ましい。

その場合、svn checkoutに相当するのは、git cloneである。今は何も考えず、とりあえずgit cloneをしてみよう。(git cloneの使い方については他サイトを参照してみて欲しい)

ファイルの追加はgit add、削除はgit remove、基本的にここら辺のインターフェースは同じである。

コミットはgit commitであるが、subversionと違う所は、自分のローカルリポジトリにcommitすると言うことである。

これをサーバ側(gitでは「リモート」と呼ぶ)にcommitするには、git pushを使う。

自分のローカルリポジトリに、コミットを溜めて行き、git pushで一気にサーバ側へ転送!と言うイメージを持っていれば差し支えない。

勘の良いユーザであれば、これだけでもgitの恩恵をある程度得られている事に気付く筈である。 利点として、「自分の作りかけのものを版数管理出来る」と言うのがある訳だ。作りかけのものをcommitして、 半端にしか動かないものであったために他のユーザに迷惑を掛ける事も少なくなる。これだけでもgitに切り替える価値はある。 (「自分の作りかけのものを版数管理したい」と言う事に興味の無いユーザであれば、一切無価値であるとは思うが・・・)

ローカルリポジトリは持ち歩ける

git cloneでチェックアウト(相当の事を)した場合、以降、ネットが断絶状態にあっても、ログの参照や、 (ローカルリポジトリへの)コミット作業は行える。名前の通り、リポジトリデータベース自体の「clone」であるからである。

・・・まぁ、これも「別に作りかけ版数管理しないし、ログも見ねぇよ」と言う人には関係ない話だと思うが・・・。

gitの使い方

まずはclone or init

既にあるリポジトリであれば、git clone、

git clone https://hogehoge.com/huge.git

新たにリポジトリを作成する場合は git init する。

git init

ファイルの追加

git add hoge

コミット

git commit

リモートへのコミット

gitではこれを「push」と呼ぶ。

git push

リモートとの同期

gitではこれを「pull」と呼ぶ。

git pull

gitならではの事

git amendを使おう!

git commit --amendは、直前のコミットに対して変更を加える事が出来る。 よく、メッセージの誤字脱字で「あ、しまった!」と凹む人も多いと思う。git commit --amendはそんな人たちを救ってくれる。

git commit --amendとすれば、メッセージを修正することが出来る。どころか、ファイルに対する修正、追加等も可能である。

amend厨になると、これがないsvnに戻って来れなくなる。仕事等の都合によってsvnも併用している際には気を付けた方が良いかも知れない。

git amendの際の注意

既にpushしてしまったものに対し、amendをすると、ちょっと面倒な事になる。

それを後々pushしようとした際、エラーになってしまうのだ。これは、amendした事により「違う枝に分岐した」扱いになってしまうものと思われる。

これを回避するためにはgit pullにてamend前の物を引っ張りマージするか、git push --forceにより強制的に上書きするかである。 git push --forceは、他人の変更すら(多分)上書きしてしまうので、git pullしてマージするのが安全だとは思う。

中央リポジトリも個人リポジトリも差はない

ないよ。