Help us understand the problem. What is going on with this article?

SourceTreeから始めないGit

More than 3 years have passed since last update.

はじめに

私は業務でPerforceを使っていますが、自宅で個人的な開発作業を行うとき、ライセンス面でPerforceを利用できないため、Gitを使ってみることにしました。

Gitを使い始める際、世の中ではSourceTreeを使う事がデファクトスタンダードのようですが、SourceTreeでリモートリポジトリを作成する場合はGitHubかBitbucketのアカウントが必要です。

個人開発なのに自分の手の届かない範囲のリソースに依存しなければならないのは決して気持ちの良い状況ではありません。(ローカルリポジトリだけで作業する選択肢もありますが……)

つまるところ、ローカルリポジトリで作業し、リモートリポジトリにpushするというGitのスタンダードなワークフローを、ローカル環境のみでやりきりたいのです。これはどうもSourceTreeのみではできないようなので、GitをCUIで使うことにしました。

ゴール

ローカル環境にリモートリポジトリを作成し、そこからcloneしたローカルリポジトリで作業した内容をpushできるようにする事を目指します。

読み進める前に

残念ながら、この記事には特筆すべきテクニックや新規性のある運用アイディア等は含まれていません。私と同じような(ひねくれた)Git初心者が、同じようなところでつまづかないための記事として書きました。

手順

  1. リモートリポジトリの作成
  2. ローカルリポジトリの作成
  3. ローカルリポジトリへファイルを新規に追加してcommit
  4. ローカルリポジトリの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でもローカルのリモートリポジトリを作れるよ!」というオチを望んでいます。

carnage
雑用係で生計を立てています。
https://booth.pm/ja/items/1574108
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away