はじめに
私は業務でPerforceを使っていますが、自宅で個人的な開発作業を行うとき、ライセンス面でPerforceを利用できないため、Gitを使ってみることにしました。
Gitを使い始める際、世の中ではSourceTreeを使う事がデファクトスタンダードのようですが、SourceTreeでリモートリポジトリを作成する場合はGitHubかBitbucketのアカウントが必要です。
個人開発なのに自分の手の届かない範囲のリソースに依存しなければならないのは決して気持ちの良い状況ではありません。(ローカルリポジトリだけで作業する選択肢もありますが……)
つまるところ、ローカルリポジトリで作業し、リモートリポジトリにpushするというGitのスタンダードなワークフローを、ローカル環境のみでやりきりたいのです。これはどうもSourceTreeのみではできないようなので、GitをCUIで使うことにしました。
ゴール
ローカル環境にリモートリポジトリを作成し、そこからcloneしたローカルリポジトリで作業した内容をpushできるようにする事を目指します。
読み進める前に
残念ながら、この記事には特筆すべきテクニックや新規性のある運用アイディア等は含まれていません。私と同じような(ひねくれた)Git初心者が、同じようなところでつまづかないための記事として書きました。
手順
- リモートリポジトリの作成
- ローカルリポジトリの作成
- ローカルリポジトリへファイルを新規に追加してcommit
- ローカルリポジトリのcommitをリモートリポジトリへpush
リモートリポジトリの作成
まずはリモートリポジトリを配置するディレクトリを作成します。
$ mkdir sample.git
ディレクトリ名のポストフィックスである.git
は、リモートリポジトリ名の慣習(仕様?)のようです。
次に、git init
コマンドに先ほどのディレクトリを指定して、リモートリポジトリを作ります。このとき、--bare
オプションと--share
オプションを指定します。
$ git init sample.git --bare --share
--bare
オプションが、実質的にリモートリポジトリの作成オプションです。このオプションを指定して作成したリポジトリは、作業コピーを持ちません。つまり、pushされたりpullされるだけのリポジトリ=リモートリポジトリになります。
--share
オプションは、リモートリポジトリが管理するファイルのパーミッションに関係しており、指定しない場合、パーミッションエラーでpushできなくなります。(後から管理ファイルのパーミッションを直接変更する方法で対処できるようです。)
特にエラーが発生しなければ、sample.git
以下にリモートリポジトリ用の管理ファイルが生成されます。これで、sample.git
ディレクトリはリモートリポジトリになりました。
ローカルリポジトリの作成
リモートリポジトリと同様、ローカルリポジトリも、まずは配置場所となるディレクトリを作成します。
$ mkdir work
次に、リモートリポジトリからclone
コマンドでローカルリポジトリを作成します。
$ git clone sample.git work
これで、sample.git
リモートリポジトリのクローンとしてwork
ディレクトリにローカルリポジトリが出来上がります。
ちなみに、次のような警告が出ますが、空のリポジトリのクローンを作成した事に対する警告のようです。
warning: You appear to have cloned an empty repository.
ローカルリポジトリへファイルを新規に追加
まずはローカルリポジトリwork
に移動して、なんでも良いのでファイルを一つ作ります。
$ cd work
$ echo a>test.txt
次に、新しく作成したファイルをインデックスに追加し、コミットします。
$ git add test.txt
$ git commit -m "test commit"
これでローカルリポジトリのmasterブランチにtest.txt
ファイルが新規追加ファイルとしてコミットされました。
ローカルリポジトリのcommitをリモートリポジトリへpush
いよいよ最後の工程です。最後はpush
コマンドで、ローカルリポジトリの変更内容をリモートリポジトリへ反映します。
$ git push origin master
origin
はデフォルトではクローン元のリモートリポジトリのURLとして解釈されます。設定は、ローカルリポジトリ直下の.git/config
ファイルに記載されています。
master
は、commitで何も指定しなかった場合のブランチ名です。要はトランクのようなメインコードラインの事です。
おわりに
せっかくGUIの素晴らしいフロントエンドツールが存在するのに、どこまでCUIでやり切るべきなのか、そのあたりは全然考えていません。結局のところ、GitHubにアカウントを作成し、ローカルのリモートリポジトリからpushしてSourceTreeを使う日が来るのでしょう。
しかし、本記事が、試しにGitを使ってみたいけれどもあまり複雑なことは考えたくない入門者にとって、はじめの一歩を後押しする記事になれば幸いです。
そして、「実はSourceTreeでもローカルのリモートリポジトリを作れるよ!」というオチを望んでいます。