分かりやすい、丁寧な記事を心がけています。
gitのアイコンです。

Gitサーバーの構築法!SourceTreeを使用して構築してみる。【完全版】

Gitサーバーを構築しよう!

Gitサーバーと接続

今回はGitサーバーを構築してみたいと思います。開発する上では切っても切れない作業になりますので、一緒に頑張っていきましょう!!先に述べておきますが、なかなか大変な作業になります。いわゆる環境構築の1つで、多くの開発初心者が打ちのめされる最初の壁かもしれません。笑
実際に現役でバリバリ開発している人でも、一度ハマると1、2日停滞することもあるような作業です。

楽しい開発者ライフを送れるように、しっかり環境を作っていきましょう!!

そもそもGitって、なんのために使うの?

早速ですが皆さんGit自体は知ってますか?

開発していると使っている方がほとんどなので、「言葉くらいは聞いたことがある!」という方もいらっしゃるかもしれませんね。

これから開発しようとしている方なら知らなくて当然なので安心してください。
私自身、Gitを使用する前は「バージョン管理ツール」という認識くらいしか持ち合わせていませんでしたから。笑

そもそも、一人で開発していることがほとんどだったので、特に意識せずFTPでアクセスして
内部ファイルを直接編集していました。(←今思えば、ただの馬鹿ですね)

結果・・・・・・

  1. エラーを吐いてもどこに戻ればいいのかわからない。
  2. 編集した箇所を探すのに、膨大な時間を費やす。

etc・・・

余計な時間を取られて、スケジュールが押してしまうなど、非常に苦しい思いをしました。

今回、PLとしてソリューション開発に参画することになったので、グループでの開発や修正作業等のことを考えると、バージョン管理ツールの構築は必須事項かと思いまして、Gitを取り入れようと決心しました。

さて、それでは「そもそもGitって何で使うの?」というところを完結にまとめておきます!

  1. 1つのシステムを複数人で開発する際にどこを誰が修正、開発したのかの記録を残せる。
  2. ある一定のタイミングでの開発のログが残せ、その時点に戻ることができる。(1種のバックアップのようなこと)
  3. 直接開発しているファイルを修正開発する訳ではないので、動かなくなったらどうしよう…とか、ビクビク開発をしないで済む。

まだまだありそうですが、この辺にしておきます。

さて、聞きなれない言葉も多少出てきましたし、言葉で説明されても訳が分からない!という方もたくさんいそうですので、まずは手を動かしてみましょう!

広告

ローカル環境でGitをインストール

まず、ローカルの環境でGitが入っているか確認します。
Gitを使うためには、自分自身の端末でGitが使用できなければ、何もできません。

サクッとインストールしてしましましょう!!
ローカル環境が整っている場合はこの部分は飛ばしてください。

入っていない場合は
ダウンロード、インストールしてください。
MacOS : http://git-scm.com/download/mac
Windows : http://git-scm.com/download/win

利用しているサーバーとのSSH接続

SSH接続をしよう

リモートリポジトリをサーバ環境に作成するためにはターミナルでのSSH接続が必須です。
各サーバに対してSSHの設定を行う必要があります。

Secure Shell(セキュアシェル、SSH)は、暗号認証の技術を利用して、安全にリモートコンピュータと通信するためのプロトコルパスワードなどの認証部分を含むすべてのネットワーク上の通信が暗号化される。

Wikipediaより引用

次の手順で公開鍵、秘密鍵を作成することができます。
1.鍵の作成

local環境

$ ssh-keygen -t rsa

上のコマンドを叩くと、「Enter file in which to save the key」と聞かれます。
名前を入れてとのことなので「id_rsa」とします。
※一般的にid_rsaとしている方が多いため。何かこだわりがあれば違っても問題ありません。

次に、Enter passphrase (empty for no passphrase)と聞かれます。
パスワードを入れてとのことなので、任意のパスワードを入れてください。
※入力しなくても問題ありませんが、一応入れておいた方が身のためだと思います。

ここまで終わると、カレントディレクトリ内に「id_rsa」 と「id_rsa.pub」ができていると思います。「id_rsa」が秘密鍵、「id_rsa.pub」が公開鍵です。

出来上がった鍵のうち「id_rsa.pub」(公開鍵)をサーバ側に移動させます。
※FTP等を利用してください。

2、サーバ側設定

移動が完了したら、移動した鍵を.sshに配置します。

サーバ環境

$ mv id_rsa.pub ~/.ssh   # .sshにファイルを配置する
$ cd ~/.ssh   # .sshに移動

.sshに配置はしましたが、おそらく「authorized_keys」というファイルがあるかと思います。以下を叩いて、統合させます。

「authorized_keys」がある場合

$ cat id_rsa.pub >> authorized_keys
  #id_rsa.pubの中身をauthorized_keysに統合
$ rm id_rsa.pub #不要になったid_rsa.pubは削除

「authorized_keys」がない場合

$ mv id_rsa.pub authorized_keys
  #id_rsa.pubをauthorized_keysに移す

ファイルのパーミッションを「600」に変更

$ chmod 600 authorized_keys
  #権限を所有者のみ読み書きに変更

3、local側設定
local側に残っている「id_rsa」(秘密鍵)も.ssh配下に移動しましょう。

$ mv id_rsa ~/.ssh   # .sshにファイルを配置する
$ cd ~/.ssh   # .sshに移動

こちらの鍵もパーミッションを「600」に変更する必要があります。

$ chmod 600 id_rsa
  #権限を所有者のみ読み書きに変更

最後に、接続確認をします。

$ ssh -p [ポート番号] [サーバのURL]  #ターミナルからサーバ側に接続

※パスは指定したパスワードを使用してください。
接続方法は上記だけでなく、ユーザー名等を指定する方法もあります。

うまくサーバー内のファイルが見えれば、SSH接続までが終了です!

大変でしたか?

普段コマンドラインやターミナルを使用しない方にとっては。最初からいきなり高い壁だったかもしれません。
ですが開発者になる上では避けては通れない道。今のうちに覚えてしまいましょう!!

広告

Gitについての簡単な知識

それでは次に進む前に、ここから専門的な用語が出てきますので、私自身の整理も兼ねて、
Gitとは何ぞやということを書いておきたいと思います。

まず始めに、Gitの全容を学びたいという方は以下のサイトが
大変勉強になります。
私も理解するのに何度も読み返して活用させていただきました。

サルでも分かるGit入門

私の方でも、今回Git構築する上で最低限必要な知識だけまとめておきます。詳しく知りたい方は上記サイトを読んで見てください。

・リポジトリ → ディレクトリの履歴を管理するためのもの。よく出てくる用語は以下の2つ。

ローカルリポジトリ自分の端末内にあるバージョン管理用のディレクトリのこと。基本的には、このディレクトリ内のファイルを修正する。
リモートリポジトリネットワーク上にあるバージョン管理用のディレクトリのこと。数名の開発者が修正したものも、このディレクトリに対して更新をかけて、常に最新のファイルになっている状態になる。

・Commit/Push/Pull → Gitにて行う処理

Commitローカルリポジトリにて修正した際に、そのファイルに対してログを残すこと。
Pushローカルリポジトリにて修正したファイルをリモートリポジトリにあげて同期をかけること。
Pullリモートリポジトリから最新のファイルをローカルリポジトリに持ってくること。(作業ファイルの相違を防ぐため、修正作業前に確認し、行う。)

上記以外にもmargeやfetch等も開発する上では必須の知識ですが、今回はとにかく環境構築をすることを目標としているので割愛します。

・ブランチ → 既存のファイルをいくつかのフローに分岐して記録しておくイメージ。
どのような分け方をするかは、それぞれのソリューション次第。
参考として、有名なものを翻訳してくださっているサイトがあったので紹介します。

A successful Git branching model を翻訳しました

Source-treeを入れよう!

構築時はコマンドラインで行う作業も複数ありますが、一度構築した後はGUIベースの方がわかりやすいかと思います。(ここで言うGUIベースは、マウスクリック等で操作ができるような見え方のことをさしています。)
そこで、今回はGUIでGitを使用する上で有名な「Source tree」を使用したいと思います。

ご自身の環境にあったものを選択し、ダウンロード/インストールしてください。
Sourcetree

まずはインストールして、以下の初期設定のみ行なってください。
今回はMacOSと仮定して進めます。

Sourcetreeを開いたら、「メニューバーのSourcetree → 環境設定」を選択し、全般のタブへ移動する。

SoucetreeにGitとMercurialのグローバル設定をファイルの変更を許可するにチェックを入れ、
デフォルトのユーザー情報を入力する。
また、ローカルリポジトリを作成する際に指定したい階層があれば、その他のプロジェクトフォルダに設定する。

これで、ようやく設定部分が終了しました。

いや〜、記事を書いていて改めて思いますが、初学者にとっては1発目からこんな高い壁が立ちはだかるなんて難しすぎるかもしれませんね。ですが、もしこの構築ができるようになれば相当な力になりそうです!エンジニアの中には、既存で構築されているGitサーバーを使用してただ開発のみを行うという方もいらっしゃいます。

自分の力で接続できるようになれば、その方たちよりも一歩先にいけることになりますね!!

引き続き、頑張りましょう!!!

広告

ベアリポジトリとノンベアリポジトリって何?

さて、早速リポジトリの作成といきたいところですが、サーバに対してgitコマンドを
行う際には、ベアリポジトリとノンベアリポジトリについて正しく知っておく必要があります。

ベアリポジトリワーキングディレクトリを持たず、更新情報を持つだけのリポジトリ。(更新管理用)
ノンベアリポジトリワーキングディレクトリを持つ。(作業用)

上記のように2つのリポジトリに分ける必要があります。

どうして、わざわざ分ける必要があるのでしょうか?

実際の作業風景を想像してみましょう…

AさんとBさんが同じタイミングで、それぞれの端末で作業を行なっています。
Aさんは開発が終わったので、サーバの環境に更新をかけました。
数分後、Bさんも開発を終えたので、サーバーに更新をかけようとするとGitから指摘されてしまいました。

上の行動で問題点はどこにあるか分かりましたか?

はい!そうです!!

Aさんが開発した内容に対してBさんが更新をかけようとしたら、Aさんの作業が全て水の泡になってしまいますよね^^;

このように、複数人での作業を行うと作業用ファイルに不整合が起きる可能性が高くなります。そのため、基本的にGitではまずは更新がないかを確認するためのベアリポジトリ作成を推奨しています。2つのリポジトリに分けて管理するようにしましょう!!

リモートリポジトリを作ろう!

リモートリポジトリを作ろう

では早速サーバ側に対して、リポジトリの作成をしていきたいと思います。

まずはターミナルを開いて、サーバに対してSSH接続しましょう。
今回は〜/htmlに対してgit_sampleというディレクトリを作成し、その中にベアリポジトリとノンベアリポジトリ(git_practice)を
作っていきたいと思います。

まずは、階層分けしたファイルを用意する。

$ cd 〜/html  #htmlに移動
$ mkdir git_sample  #git_sampleを作成
$ cd git_sample #git_sampleに移動
$ mkdir git_practice #git_practiceを作成
$ cd git_practice #git_practiceに移動
$ echo test > test.html #testと書かれたtest.htmlを作成

上記で用意したディレクトリとファイルを、gitリポジトリ化します。

$ cd 〜/html/git_sample/git_practice  #git_practiceに移動
$ git init  #gitリポジトリの初期化
$ git add . #ステージングエリアに登録
$ git status #ファイルのリストを確認
$ git commit -m "first commit" #first commitとコメントを残した変更を保存
$ ls -a #git_practiceに入っているファイルを確認

ターミナル画面上に「.git」ができていることを確認してください。
これでノンベアリポシトリの完成です。続けてベアリポジトリを作成します。
ベアリポジトリはノンベアリポジトリと別階層(参照できないようにする)にて作成する
必要があります。そのため以下のような形の階層で作成したいと思います。
〜/html/git_sample/git_practice ← ノンベアリポジトリ
〜/html/git_sample ← ここにベアリポジトリを作成します。

それでは、そのまま続けてターミナルで以下を叩いていきます。

$ cd .. #1つ前の階層(git_sample)に移動
$ git clone --bare --shared 〜/html/git_sample/git_practice bare_git_practice.git
#git_practiceからbare_git_practice.gitという名前でファイルをクローンする。
$ ls -a #bare_git_practice.gitというディレクトリができていることを確認する。

これでベアリポジトリとノンベアリポジトリが出来上がりました。
しかし、このままではノンベアリポジトリが更新されてもベアリポジトリとの同期がとれていないため、正しく更新がかかりません。
ここから、その更新を行うトリガーを作成していきます。
そのまま続けていきます。

$ cd bare_git_practice.git/hooks #ベアリポジトリ内のhooksに移動
$ vi post-receive #post-receiveというファイルを作ってテキストエディタで開く

「i」を押して入力モードにし、ファイル内に以下のように記述し、保存します。

#!/bin/sh
#
cd /〜/html/git_sample/git_practice
git --git-dir=.git pull /〜/html/git_sample/bare_git_practice.git master

記述が終わったら、「escape」を押してコマンドモードに戻す。
「:wq」と叩いて保存して終了。

$ ls -a #hooksの中に、「post-receive」ができていることを確認
$ cat post-receive #「post-receive」に正しく記述ができていることを確認
$ chmod +x post-receive #「post-receive」に実行権限を付与

これでサーバ側のリポジトリ作成は終了です。
次は、作成したリモートリポジトリに対応したローカルリポジトリを作成します。

広告

ローカルリポジトリを作ろう!

ローカルリポジトリ

それでは、ローカル環境にリポジトリを作成したいと思います。
Sourcetreeを開いてください。(macOSと仮定して進めます)

まず、新規… → URLからクローンを押します。
source tree側でローカルリポジトリを作成する画面です。「URLからクローン」から始めていきます。

その後、ソースURLを入力します。
形式は
ssh://<<ユーザー名>>@<<ドメイン名>>:<ポート番号>〜/html/git_sample/bare_git_practice.git
のような形です。
上記入力がされると、自動的に保存先のパスとプックマーク名が入力されます。
(変更したい場合は変更してください。)
ソースの参照先が正しくできた場合、以下の画像のように「これはGitリポジトリです」と表示されます。
後はクローンを押して完成です。
※ソースURLの階層はベアリポジトリの階層です。ノンベアリポジトリではないので注意してください。

それでは、いよいよpushできるか行ってみたいと思います。

まずは、ローカルリポジトリから「test.html」を開いて、適当に編集して保存しましょう。
すると、Sourcetreeのgit_practiceの所に「1」がついています。
ローカルリポジトリのファイルを編集すると、source tree側に「1」がつきます。

中に入ってみると以下のような画面になっています。
source tree でコミットする直前の画面です。ファイルを編集した部分の色が変わっていることを確認してください。

まずは、作業ツリーのファイルにある「test.html」をチェックしましょう。するとIndexにステージしたファイルに移動します。
その時点で左上にあるコミットを押しましょう。
すると、下部にコメントを入力できる箇所が出てきたかと思います。
適当に内容を入力して、右下のコミットを押しましょう。
source treeでコミットする場面です。必ずコメントをいれましょう。

ブランチでmasterを選択し、1aheadの箇所にカーソルを入れて上部のpushを押しましょう。
SourceTreeでプッシュを行う場面です。プッシュに「1」がついていることを確認してください。

プッシュ先のリポジトリやプッシュするブランチ等出てきますが、今回はひとまずpushできるところまで完成させたいので、そのままOKを押してみてください。エラーが出なければほぼ成功です。

それではリモートリポジトリのノンベアリポジトリ側を見てみましょう。
正しくファイル内容が書き換わっていれば成功です。
お疲れ様でした!!

広告

GitHubとも接続しよう!(おまけ)

GutHubアカウントの作成

まずはGitHubのアカウントを取得する必要があります。
取得済みの方は読み飛ばしてください。

まだ取得していない方は、アカウントを取得してください。
GitHub
特に必要がなければFreePlanで大丈夫です。

※ソースコードを公開したくない場合は有料会員にならなければなりません。

GitHub リポジトリの作成

それではGitHubにサインインします。

リポジトリの新規作成を行います。
「New repository」を押して以下の手順で進めてください。

1.下の画面に遷移いましたら、「Repository name」に「github_practice」と入力。
2.「Description」は任意でリポジトリの説明を入力しましょう。
3.publicにチェックを入れる。※privateは有料会員にならないと選択できません。
4.「Create repository」を押して完成です。
※Initialize〜等ありますが今回は何もせずに進めています。

作業が完了すると、下の画面が出てきますので、SSHのURLをコピーしておいてください。

githubで新しくリポジトリを作成する画面です。Repository nameを入力して、publicにチェックをいれて作成してください。

Source Tree側の設定

次にSource Treeの設定を行なっていきます。
まずは、前回作成した「git_practice」に入ります。

その後メニューバーにあるリポジトリ → リポジトリ設定 リモートタブに入ります。
まずはメニュー>>リポジトリ>>リポジトリ設定を押してください。

既に、
名前:origin パス:サーバ上のURLで作成されているかと思います。

既にoriginがありますが、これはserverと繋がっているもののため、ここに新たにgithub用のパスを作っていきます。

ここに、
名前:github パス:GitHubからコピーしてきたURLで作成します。
追加を押してください。

source treeとGithubを繋ぐ場面です。githubのSSH用URLをコピーして「URL/パス」の部分にいれてください。

以上でgithubのパスが作成できたかと思います。

後は接続確認です。
ローカルリポジトリを修正して、コミット、pushまではサーバ側で行なったことと同じ手順です。
ただし、下の画面でプッシュ先のリポジトリをgithubにしてからOKにしてください。

source treeからGithubに対してpushをします。プッシュ先のリポジトリをgithubにしてからOKを押してください。

これでGitHubに対してもpushが行われているはずです。
以上で一通りの設定が終了です。


※改善したい点
個人的に改善したい点として、サーバとGitHubに対して同時にpushがかけられるようにしたいです。
localのconfigファイル内にてoriginにURLを2つ指定したところエラーになってしまいうまく動きませんでした。また試行錯誤したいと思います。
もし、方法を知っている方いましたら、是非是非コメントをいただければ嬉しいです。
よろしくお願いします。

以上。yukilaboでした!!

広告
gitのアイコンです。
興味を持ったら是非!!
広告