見出し画像

Gitサーバーを立てる

プログラムにしろ、スクリプトファイルにしろ、作成して使っているうちに、変更は出てきます。細かな修正がちょっとずつ入る分には、あまり気にならないと思いますが、ちょっと挙動が変わるような変更を入れる場合、バックアップを取りながらしますよね。でも、バックアップを取りながらだと、そっちの管理も気にかかるようになります。そこで、バージョン管理プログラムの出番です。例え一人でも、例えどんなに小さなプログラムでも、バージョン管理プログラムで管理することは、後々のためになったりします。
今、バージョン管理プログラムで一番使われているのは「Git」になりますかね。Gitは特にサーバーを立てずとも、ソースの履歴管理をすることができます(所謂、「ローカルリポジトリ」だけでの管理)。ただ、Gitの最大の特徴は「分散管理」にありますので、「リモートリポジトリ」を使った管理も覚えておいて損はありません。今だと、「GitHub」の利用も敷居が低くなったので、GitHubにリモートリポジトリを配置するのもありですが、他人とのコラボレーション(共同作業)を考えていないものであれば、ローカルに閉じて管理するでもいいと思います。
そこで、今回はローカルの環境にGitサーバーを立て、自宅LAN内でリモートリポジトリを使った管理環境を構築してみます。

用意するサーバー

まずサーバーですが、物理的に別のコンピューターで用意するでもいいですし、VirtualBoxなどを使って、仮想PCをサーバーにするというのもあります(仮想PCだとあまり意味が無いかもしれないけど、まあ、勉強の意味で)。
今回は、VirtualBoxで作成した仮想PCにCentOS 8をインストールしてあるサーバーをGitサーバーにするようにします。

Gitの導入

サーバーとなるマシンにGitをインストールしましょう。とは言え、CentOS等のLinuxには最初から入っていますし(元々、GitはLinuxのカーネルのソースの管理をするために作られたシステムなので)、FreeBSDと言った*BSDなどでもパッケージやportsコレクションからインストールすることができるので、それほど難しいことではありません。
Windowsの場合でも、Gitの公式ページからインストーラーをダウンロードして実行するだけで、Gitをインストールすることができます。

リモートリポジトリを用意する

まずはリモートリポジトリを格納する場所(ディレクトリ)を用意します。場所はどこでも構いません。ちなみに私は、/varの下にgitというディレクトリを作り、その下にプロジェクト毎のリポジトリを作るようにしています。例えば、スクリプトファイルとして作成した各種ツールを管理するためのリポジトリとして"tools.git"というディレクトリを"/var/git"の下に作成します(gitでは、通例、リモートリポジトリ上でプロジェクトを管理する際のディレクトリの名前には".git"を最後に付けるようにしています)。
次に、今作成したプロジェクト用のディレクトリに移動して、リポジトリの初期化をします。リポジトリの初期化には"git init"コマンドを使用します。

git init --bare --shared

最初の"--bare"オプションは対象のディレクトリを管理用情報以外は何もない、空のディレクトリとして初期設定する指定になります。"--shared"オプションは共有リポジトリにする指定になります。
後にブランチの話が出ますが、ここでデフォルトブランチの話を。
gitではデフォルトのブランチ名に"master"を使います。しかし、昨今、この"master"という単語に敏感な風潮が出ております。そのため、デフォルトのブランチ名を変えるところが増えております。gitも最近のバージョンではこの風潮に合わせるかのように、"git init"コマンド実行後に下記のような注釈を出すようになりました。

hint: Using 'master' as the name for the initial branch. This default branch name
hint: is subject to change. To configure the initial branch name to use in all
hint: of your new repositories, which will suppress this warning, call:
hint: 
hint: 	git config --global init.defaultBranch <name>
hint: 
hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and
hint: 'development'. The just-created branch can be renamed via this command:
hint: 
hint: 	git branch -m <name>

システム全体的にデフォルトのブランチ名を"master"から変更する場合は、"git config --global init.defaultBranch <ブランチ名>"を実行することでデフォルトのブランチ名を変更することができます。例えば、"main"という名前に変更する場合は

git config --global init.defaultBranch main

といった具合です。

後は開発メンバーの構成に合わせて、グループの設定をしたり、パーミッションの設定をしておきます。
これで、リモートリポジトリが利用できる準備ができました。

クライアント側の設定

続いて、クライアント側の設定と立てたサーバーのローカルリポジトリへPUSHするまでの流れを紹介していきましょう。

ローカルリポジトリの初期化

まずはローカルで使用するためのディレクトリ(Windowsならフォルダ)を作成します。続いて、ディレクトリに移動し、"git init"コマンドを実行します。ここでは特にオプション等は指定しません。

ユーザー設定

次いでgitを使用するユーザーの設定。ユーザー設定をしないとローカルリポジトリへのコミットすらできませんので、ユーザーの設定をしましょう。
ユーザー設定で、最低限設定しなければならないのは、「ユーザーのメールアドレス」「ユーザー名」の2つになります。それぞれの設定パラメータは"user.email""user.name"で、"git config"コマンドで設定します。これらのパラメータは、適用する範囲によって"git config"で指定するオプションが変わります。
まず、グローバルに設定する場合。これはクライアントとして使用する端末で共通で使用する場合です。この場合は"--global"オプションを指定して"git config"コマンドを使用して設定します。

git config --global user.email "user@example.com"
git config --global user.name "user name"

続いてローカルな設定にする場合。これは、複数のアカウントを持っている場合にアカウント毎に設定を保持させたりとか、プロジェクト毎に設定を変えておきたい場合に使用します。ローカルな設定にする場合は、適用させたいローカルリポジトリとなるディレクトリへ移動し、"git config"コマンドで設定します。

git config user.email "user@example.com"
git config user.name "user name"

見ての通り、特にオプションの指定はありません。設定内容を確認する場合は、以下のように"git config"コマンドを実行します。

git config --global -l
git config --local -l

ファイルを管理対象とする

続いて、gitでバージョン管理したいファイルを登録します。
先ほど作成したディレクトリに管理対象としたいファイルを集めます(すでにまとまっている状態のディレクトリで"git init"を実行しても良いです。要は、ローカルリポジトリとなるディレクトリにファイルがまとめられている状態にするわけです)。ここで、"git add"コマンドを実行して、ファイルを管理対象とします。

git add .
または
git add <管理対象とするファイル名>

1つ目はディレクトリにあるファイル全体を対象にして登録します(ファイルというよりはカレントディレクトリを登録する感じですかね。"."で指定するので)。2つ目は対象となるファイルを個別に登録します。

ファイルをコミットする

"git add"で管理対象としたら、"git commit"コマンドでローカルリポジトリへコミットします。

ローカルリポジトリにリモートリポジトリを登録する

ここでローカルリポジトリとリモートリポジトリを関連付け、リモートリポジトリに変更内容をPUSHしたり、リモートリポジトリからPULLやCLONEすることができます。
まずはローカルリポジトリにデフォルトのリモートリポジトリの情報を設定します。しかし、リモートリポジトリに対しての操作を行う場合、入力するコマンドが長くなります。そのため色々と短縮できるような設定をします。まずは"git remote add"コマンドでリモートリポジトリに「別名」を付けます。"git remote add"コマンドでは接続先をURL指定するのですが、使用プロトコルによってURLの指定の仕方が変わります。ここでは自宅のLAN上に構築していますので、SSH接続を使用した場合を例に説明します。SSH接続でリモートリポジトリを登録する場合の"git remote add"コマンドは以下のようになります。

git remote add origin ssh://<ユーザー名>@<サーバー名>/<リモートリポジトリへのフルパス>

例えば、git-serverというサーバーの/var/gitにあるtest.gitというリモートリポジトリへhogeというユーザーで接続する場合は以下のようになります。

git remote add origin ssh://hoge@git-server/var/git/test.git

ここで"oreigin"は接続先となるリモートリポジトリに付ける「別名」で、これを指定することで、長いURLを指定する手間が省けます。
続いて「ブランチ」の指定をします。gitでは、開発が進むにつれて、とある時点で「枝分かれ」させることができます。この「枝」のことをブランチと言います。リポジトリを作った時点では"master"というブランチしかありませんので、この"master"ブランチを対象にするようにします。先ほど指定した"origin"の"master"ブランチをデフォルトの接続先にする設定は、下記のようになります。

git config branch.master.remote origin

続いて、ローカルリポジトリの変更内容をリモートリポジトリの管理領域へ反映させるための設定をします。話は遡りますが、サーバー上でリモートリポジトリを作成する際、"--bare"オプションを指定して管理情報を作成するようにしました。この時作成された管理情報の内、"refs/heads/master"がローカルリポジトリから反映された情報が記録される場所になります。そこで、反映情報を下記のように指定します。

git config branch.master.merge refs/heads/master

これでローカルリポジトリとリモートリポジトリが関連付けられ、対象のファイルを引き出したり、変更を反映することができるようになります。

終わりに

簡単ではありますが、自宅LAN内にリモートリポジトリを作成して管理するまでの流れを紹介しました(自分の備忘録の意味も含めて)。私もネットで検索しながらザっと進めて構築しているので、若干、解釈が違う箇所があるかもしれませんが、参考にしていただければと思います。

この記事が気に入ったらサポートをしてみませんか?