今までSubversionを利用していましたが、とうとう?やっと?遅ればせながらGit(ギット)に移行する事になりました。最初の方はお試しの移行期間として、共有リポジトリをさくらインターネットのレンタルサーバ(スタンダード/Linux)に作成して、クライアント操作(Windows環境)は最初はmsysgitで、後からTortoiseGitで行うことにしました。環境構築までの作業を備忘録としてまとめました。さくらインターネットのレンタルサーバはそのままでgitが使用できる状態でした。
(サーバ操作)共用リポジトリを作成する。
gitの共用リポジトリを作る際は、「--bare」と「--share」オプションを指定します。
「--bare」はbareリポジトリを作成するという意味で、作業ディレクトリを持たない構成で、通常の「.git」ディレクトリ配下に作成される管理情報ファイルのみをカレントディレクトリに展開します。(リモートリポジトリではファイルは編集しないので、管理情報のみ存在させます。「.git」ディレクトリは作成されません。)
ベアリポジトリには慣例的にディレクトリ末尾に.gitを付けることになっている。
1 2 3 |
[server]$ mkdir repos.git [server]$ cd repos.git [server]$ git --bare init --share |
(クライアント操作)ローカルにリポジトリを作成
ローカルリポジトリを作成します。
作業ディレクトリ(リポジトリに登録したいファイルが存在するディレクトリ)で以下コマンドを実行します。
1 2 3 4 |
[local]$ cd gittestprog ※プロジェクトディレクトリに移動します [local]$ git init ※「.git」ディレクトリが作成されます。 [local]$ git add . [local]$ git commit |
- git initコマンド:Gitのリポジトリの作成を行います。 「.git」ディレクトリを作成し、「.git」ディレクトリ配下に管理情報ファイルを作成します。
- git addコマンド:編集したファイルをインデックスに追加していき、ステージング状態にしていきます。
- git commitコマンド:ステージング状態のファイルをローカルリポジトリにコミットします。
- git add . はワーキングツリー(作業ディレクトリ)に新規作成された、もしくは変更されたファイルをaddします。つまり、rmコマンドなどで削除されたファイルはaddされません。
- git add -u は一つ前と最新のステージを比較して、変更があった部分のみをaddします。つまり、新しく作られたファイルはaddされません。
- git add -A は git add . と git add -u を足したものですから、新規作成、修正、削除といった全てのファイルをaddします。
ローカルリポジトリにリモートリポジトリを登録する。
ローカルリポジトリの反映先(push/pull)のデフォルト宛先を指定します。
この操作によって今後「git push」コマンドでURLを指定しなくても、指定済みのリモートリポジトリへの登録を行えるようになります。
1 2 3 |
[local]$ git remote add origin ssh://user_id@user_id.sakura.ne.jp/home/user_id/repos.git [local]$ git remote -v ※設定が出来ているか確認 [local]$ git push origin master |
user_idはさくらインターネットを契約した時に決定されるアカウント名になります。それ以外のサーバでは環境に合わせたURLを指定して下さい。sshで接続しています。
- git remote addコマンド:リモートリポジトリへの新規接続を作成します。登録後は長いURLを都度入力する事なく、リモートの短縮名(上記の場合はorigin)を指定すればよいことになります。
- git pushコマンド:ローカルリポジトリの内容をリモートリポジトリにプッシュして反映するリモートリポジトリにプッシュを行う(SVNのコミット)
git remote add origin ... の意味は?
URLに"origin"という短縮名(ニックネーム)を付けます。慣習上、"origin"という名前が使われることが多い。どうしてもニックネームをつける必要はありません(git remote addしなくてもよい)。
git push origin master の意味は?
「ローカルリポジトリをoriginというリモートサーバ(リモートレポジトリ)に対してアップロードせよ。指定するブランチはmasterである。」 ということです。
・push = アップロード
・origin = リモートのサーバ名
・master = デフォルトのブランチ名 (svnでのtrunkと同じ意味)
ちなみに"origin"は、「サーバを表すただの短縮名」なので、代わりにリモートサーバのURLを直接書いてもかまいません。そして、"master"は正式に書くと"master:master"です。(ローカルリポジトリのmasterをリモートリポジトリのmasterに反映させる)
ローカルリポジトリのgit管理を解除する
プロジェクトディレクトリかgit管理を外したい場合は、.gitディレクトリを削除します。
コマンド(サーバ操作/リモートレポジトリ)
コマンド | 説明 |
git --bare init --share | ベアリポジトリを作成し、グループ書き込み権限を追加する |
コマンド(クライアント操作/ローカルレポジトリ)
コマンド | 説明 |
git init | Gitのリポジトリの作成を行います。 |
git add . | カレントディレクトリの内容を全てインデックスに追加する。 |
git rm [FILE] | 指定したファイルを作業ディレクトリとインデックスから削除する。 |
git rm -r [DIRECTORY] | 指定したディレクトリ以下を再帰的に削除する。 |
git commit | git addで指定されていたファイルのコミット |
git remote add [remote] ssh://レポジトリ場所 | リモートリポジトリへの新規接続を作成する。 |
git remote remove [remote] | リモートリポジトリ削除 |
git push [remote] [branch] | リモートへのプッシュ |
git status | リポジトリ内での追加/変更ファイルの確認 |
git show | 最新コミットの内容を表示する。 |
git diff | インデックスと作業ディレクトリの差分を表示する。 |
git remote -v | リモート設定内容を確認します。 |
git show-branch | ブランチの作成・変更・マージなどの履歴を表示する。 |
用語集
リモートリポジトリ
SVNと同様、一箇所に存在するリポジトリ。
ローカルリポジトリ
各自のローカルの中にGitで作成するリポジトリです(SVNにはない仕組みです)。フォルダ内に.gitというフォルダが作成されていれば、それらのファイルはgitのローカルリポジトリから管理されていることになります。
作業フォルダ(ワーキングツリー)
実際にソース(ファイル)を編集するフォルダです(SVNと同様)。一番上の階層には.gitファイルが置かれていて、gitが管理しているフォルダであることがわかります。
クローン
git cloneコマンドを使って、リモートリポジトリをローカルリポジトリとしてローカルにコピーしたものです。まず最初はリモートリポジトリのアドレスからクローンを作成することから始めることになると思います。
コミット
git commitコマンドで作業フォルダからローカルリポジトリにソースをコミットすることです。SVNと違い、リモートリポジトリに対するものではありません。
インデックス(ステージング)
作業フォルダからローカルリポジトリにコミットする前の状態。git addコマンドでインデックスに追加できます。ファイルをインデックスに追加することで「このファイルはコミットの対象」という目印をつけることができます。git addコマンドでインデックスを作成しなくても、いきなりコミットすることもできます。(git commit -a)
プッシュ
ローカルリポジトリからリモートリポジトリにコミットすること。git pushコマンドでプッシュできます。「SVNのコミット≒Gitのコミット+プッシュ」のようになります。
フェッチ
リモートリポジトリからローカルリポジトリへバージョン履歴を更新することです。git fetchコマンドで実行できます。(ただし、プルと違ってマージは行われません)。
プル
リモートリポジトリからローカルリポジトリのバージョン履歴と作業フォルダを更新することです。git pullコマンドで更新できます。SVNの更新とほぼ同じイメージです(フェッチと違い、Gitにより自動でマージされます)。
ブランチ
SVNと同様の意味合いです。ブランチを切っていくことでバージョンの管理を分岐していくことができます。
リモートトラッキングブランチ
リモートリポジトリにあるブランチを監視しているブランチです。このトラッキングブランチとローカルリポジトリのブランチを紐付けし、トラッキングブランチが監視しているリモートリポジトリのデータを引っ張ってくるイメージです。リモートトラッキングブランチで何かをするということはなく、ローカルリポジトリとリモートリポジトリの橋渡しをしています。
ベアリポジトリ
作業ディレクトリ(ワーキングツリー)を持たない。更新情報だけを持っているレポジトリです。
ノンベアリポジトリ
作業ディレクトリ(ワーキングツリー)を持つレポジトリです。
ワーキングディレクトリ(作業ディレクトリ、ワーキングツリー)
ファイルそのものがあるディレクトリのことです