今回はWindows環境にGitサーバーを構築する方法について解説いたします。
私もGitサーバーを構築する際に各サイト様を参考にしても何個か上手くいかなかった箇所や複数のサイトにまたがって情報を調べたりと大変だった思い出があるので、これからサーバーを構築するという方が苦労しないように情報をまとめておこうと思います。(備忘録的な部分も大きいですが笑)
仕事で頼まれたり、自分の作業にGitサーバーが必要だったりする場合にご参考になれば幸いです。
構築するGitサーバーのイメージ
さて今回ご紹介するGitサーバーの構築方法についてですが、まずはどんな環境になるのかイメージを示しておこうと思います。
とは言ってもいたって単純な環境になりますので、わざわざ書く必要もないかなとは思いますが念のため。
環境構成は以下の通りです。

サーバーの構成
・Gitソフトウェアをインストール
・OSはWindows(ServerでなくてもWin10とかでも可)
クライアントの構成
・Gitソフトウェアをインストール
・OSはWindows(Win10等)
サーバーとする端末にも、接続する端末にもGitを入れるといういたって単純な構成です。
サーバーのOSにはWindowsServerが良いとは思いますが、クライアントOSのWindowsでも大丈夫です。
Gitソフトウェアのインストール
まずは両方のサーバーにGitを入れていきましょう。
1. 最初に以下のサイトからGitのインストーラーをダウンロードして取得します。

Windows版のインストーラーはアクセスすると右側に[Download X.XX.XX for Windows]という記載があると思うのでそちらから取得してください。
該当箇所をクリックすると以下のような画面になると思いますので、[Standalone Installer]の方を取得します。

Gitのインストーラーが取得出来たら、インストーラーを起動します。
以下ではインストールの各オプションについて説明しますが、重要な部分のみ解説していきます。
飛ばしている個所については基本デフォルトで大丈夫な個所と思ってください。
一応Gitの各インストール項目について詳しく解説してる記事がありますので、必要な方はそちらをご覧ください。

1. Information.

インストーラーをクリックすると上記のような画面が表示されますので、[Next]をクリックします。
(本画面はライセンスの説明になりますので、やる事は特にないです。)
2. Select Start Menu Folder.

ここではスタートメニューにGitのフォルダを作成する際の名称を聞かれております。
とくにこだわりがなければそのままでよいと思います。
また、必要がないのであれば[Don’t create a Start Menu folder]にチェックを入れてください。
完了したら[Next]をクリックします。
3. Choosing the default editor used by Git

こちらはGitで使用するデフォルトのエディターを選択する画面です。
VSCode等を利用する場合は、[Use Visual Studio Code as Git’s default editor] にチェックを入れると、後々の設定が必要なくなるのでかなり便利かと思います。
適当なエディターを選んだら[Next]をクリックします。
4. Adjusting your PATH environment

こちらのオプションですが、Gitをコマンドラインから使う時どういう風に使うかを聞かれています。
一番上はGitBashからのみで、2番目がサードパーティーのソフトウェアから、一番下がUNIX系のツールを使う時の選択肢になっております。
WindowsのコマンドプロンプトやそのほかのGitのツールなんかはサードパーティーに該当するので2番目を選ぶのがおすすめです。UNIX系のツールを使う予定がある場合は一番下を選択してください。
完了したら[Next]をクリックします。
5. Choosing HTTPS transport backend

このオプションではGitでHTTPS接続を行う際に利用するSSL/TLSライブラリはどれにするかを聞いてきています。
通常個人で利用する場合は上でよいのですが、社内に設置してあるルート証明書を利用する際なんかは下を選択する必要があります。
完了したら[Next]をクリックします。
6. Configuring the line ending conversions

このオプションではテキストファイルの改行コードをどのように扱ったらよいかを聞いております。
1番上は、チェックアウト時に改行コードを “LF” から “CRLF” に変換し、コミット時に “CRLF” を “LF” に変換するようにします。
2番目はチェックアウト時は改行コードを変更せず、コミット時に “CRLF” を “LF” に変換します。
3番目はコミット、チェックアウト時ともに改行コードの変更を行わないようにする設定です。
Windows環境なら1,UNIX環境なら2って感じでしょうか。適当なものを選んでください。
完了したら[Next]をクリックします。
7. Configuring experimental options.

最後にオプションの内容が問われる画面へと移ります。
試験運用的なオプションだそうですので、チェックは要れる必要は特にはないかなと思います。
完了したら[Install]をクリックし、インストールを開始します。

上記の画面が表示されればインストールは完了です。
なお、こちらはサーバーおよび、クライアント両方にインストールしてください。
クライアント側の設定および作業
それではインストールしたGitを使って各種設定を行っていきます。
1. Gitのグローバル設定
最初に設定を行うためにGit Bashを起動します。
Gitで使われるメールアドレスとユーザー名を設定していきます。
こちらはコミット時に表示されるような内容ですので、実際に存在するメールアドレスである必要はありません。
わかりやすいように適当な名前を入れていきます。
-ユーザー設定
次に日本語名を表示するために以下のように設定をします。
-日本語名を表示するための設定
上記でグローバル設定は完了です。
その他Gitプロトコルがハングアップしないようにする設定もあるのですが、Gitプロトコル自体が2022年に廃止になっているので、不要かと思います。
コマンド実行後は特に何も返答がないので以下のようになると思います。

SSHキーの用意
さて、利用するユーザーの設定ができましたので、次にサーバーにアクセスできるようにするために鍵を用意します。
GitサーバーへはSSH接続になりますのでSSHキーを用意します。
1. で起動したGitBashに以下のコマンドを打ち込みます。
tオプションに鍵のタイプを(デフォルトでrsaなのでなくてもよいです)、bオプションに鍵の長さを、Cオプションにコメントを指定(ここではユーザーがわかるようにメールアドレスを指定)しております。
実行すると以下のようにキーの保存先を聞かれるので特に問題がなければそのままEnterを押します。
Enter file in which to save the key(c\Users\<ユーザー名>\.ssh\id_rsa)

続けてkeyのパスフレーズの入力を求められるので、適当な内容を設定します。
後で使うので忘れないようにメモしてください。
(Enter same passphrase again: と出たらもう一度同じパスワードを入力してください)

上記の画面が表示されたら以下のように指定した場所に2つのファイルができると思います。

サーバーには公開鍵の登録が必要ですので後々この作成した公開鍵をサーバーに登録します。
また、秘密鍵の方はクライアントから接続する際に何らかの形で指定して接続することになりますので、これら2つのファイルは後程必要になります。
また、公開鍵や秘密鍵とは何ぞやという方は以下の記事で解説してますので興味があったら覗いてみて下さい。

サーバー側の設定および作業
それではクライアント側の作業が一通り完了いたしましたので、サーバー側の作業を行っていきます。
1. リポジトリの作成
まず初めに、サーバーにデータを格納するためのリポジトリを作成します。
リポジトリはプロジェクト単位に作成したりすると思いますので、リポジトリを複数格納できるフォルダを任意の場所に用意します。

フォルダ用意したらその中にリポジトリ用のフォルダを作成します。
名称は[<リポジトリ名>.git]というようにする暗黙のルール的なものがあるようなので、そのように名称を付けると良いと思います。
ここでは「sample.git」とします。

リポジトリ用のフォルダが用意できましたら、GitBashを起動し、作成したリポジトリ用のフォルダに対して以下のコマンドを実施します。
上記のコマンドを実施しフォルダが以下のようになっていればリポジトリの作成が完了です。

また実行後GitBashターミナルは以下のようになります。

上記のようになっていればリポジトリについてはOKです。
2. ファイアーウォールの穴あけ
WindowsServer等を利用する場合は、Gitの通信を行えるようにポートに穴をあけてあげる必要があります。
Git、というよりもSSH通信には通常22番ポートが利用されるので、22番のポートにファイアウォールの穴あけ作業を行います。
この作業を行っていないとクライアントからクローンする際にエラーが発生する可能性があるので、必ずやっておきましょう。(私の場合、これをやってなくてクローン出来ずに何時間か「なんでやねん!」って悩んでました…)
1. [Windows] キー及び、[R]キーを押し、「ファイル名を指定して実行」を開き、入力エリアに “wf.msc” と入力します。

2. [セキュリティが強化されたWindows Defender ファイアウォール] が開かれますので、左のメニューから[受信の規則]をクリックします。

3. 受信の規則を開くと右側に「新しい規則…」と項目がありますので、そこをクリックします。

4. 新しい規則を作成する画面が表示されたら、[ポート]を選択して「次へ」をクリックします。

5. ラジオボタンがいくつかありますので一つ目を[TCP] 、 2つ目を[特定のローカルポート] を選択し、入力エリアに22と入れます。完了したら「次へ」をクリックします。

6. 接続をどうするか聞かれるので、[接続を許可する]を選択して「次へ」をクリックします。

7. 次の画面では変更なく「次へ」をクリックします。

8. 最後に名前に適当な名称を入れて「完了」をクリックします。

これでファイアウォールの穴あけ作業は完了です。
3. SSH接続の設定と公開鍵の登録
それではサーバーの作業の締めとしてSSHの接続設定を行っていきます。
1. 最初にGitBashを起動します。
起動する際は「管理者として実行」で起動してください。
後々SSHキーを作成しますが、その際に管理者でないと
「Saving key “ssh_host_ecdsa_key” failed: Permission denied」
という権限エラーが発生してしまいます。

2. GitBashを起動したらGitをインストールしたフォルダに移動します。
Gitのインストール場所を変えていなければ [Program Files] にインストールされているはずなので、以下のコマンドを実行し、 [Program Files] に移動します。([Program Files] はフォルダ名にスペースが入っているので、シングルクォートで囲む必要があることに注意してください。)
3. 移動したら、次のコマンドを実行し、SSHキーを作成します。
「Generating public/private rsa key pair.
Enter passPhrase (empty for no passphrase) :」
と言われたら適当なパスフレーズを入力してください。
キーを3つ作成するので3回求められるはずです。(確認入力含め6回です。)
実行後は以下のようになります。

また、実行したあと「C:\Program Files\Git\etc\ssh」フォルダは以下のようになっているはずです。

4. キーの作成が完了したら今度はクライアントで用意した公開鍵を登録します。
サーバー側の [C:/Users/ユーザ名/.ssh] フォルダの直下に [authorized_keys] というファイルを新規に作成します。

作成したらテキストエディタ等でこの [authorized_keys] を開きます。
開いたら、先ほどクライアント側で用意した公開鍵の内容をここにコピペします。

1行に一個の鍵を登録してください。
複数個ある場合はそれぞれ行を分けて登録するようにしましょう。
これで公開鍵の登録は完了です。
4. SSHデーモンの起動
さて設定は諸々終わったので最後に、Git接続できるようにデーモンを起動してあげます。
デーモンとは何ぞやという人に簡単に説明すると「コンピューターのメモリに常駐し、サーバーのプログラムやシステムの要求に応じて自動的にサービスを提供するバックグランドシステム」のことです。
要は、システムの受付をやってくれる人ということですね。
因みにこの人がいないと後述するエラーが発生して接続できないので、注意してください。
1. GitBashを立ち上げます。Gitの操作がサードパーティーから受付可能な形でインストールしていればコマンドプロンプトでも構いません。
2. ターミナルを立ち上げたら、以下のコマンドを実行します。
実行後、タスクマネージャーを起動して以下のようにプロセスに [sshd.exe] がいたら起動完了です。

リポジトリからクローンを行う
それでは最後に接続確認も含めてクローンを実施します。
Gitを操作したいのはクライアント側になるはずですので、以下の操作は全てクライアント側のものです。
1. 初めにGitBashを起動します。
2. 起動したら、Gitから取得したファイルを配置したいフォルダに移行します。(ここではC:\wrok\testとします。)
3. 移動後以下のコマンドを実施してGitサーバーのリポジトリからクローンしてきます。ここでは先ほど作成した [sample.git] からデータを取得します。
ユーザー名にはサーバーのユーザー名を、サーバーのIPアドレスはipconfig等で確認したものをいれてください。
コマンド実施後以下のような「.gitフォルダ」ができていればクローンが完了です。

あとは好きなように、ファイルをプッシュしたり、プルしたりしてGitサーバーを使い倒してあげてください。
Connection timed out のエラーが出る場合
以下のように [Connection timed out] のエラーが出る場合はSSHデーモンさんがお休みになってしまっているので、もう一度「/usr/bin/sshd.exe」のコマンドを実行して起こしてあげてください

いかがでしょうか。
Gitを使うのにも便利なツール等があり、それらの紹介も別記事でやりますのでもしよかったらご覧になってください。
またその他別のエラーが出た、うまく接続や設定ができない等ございましたら、ご連絡いただけますと幸いです。
今回はここまでです。
お疲れ様でした。
コメント
コメント一覧 (2件)
はじめまして
記事を参考に構築していたのですが、エラーになる点が有りましたので、よろしければ教えて頂きたいです。
最後のgit. clone ssh://….
のコマンドを実行したところ、パスワードを聞かれるのですが、思い当たるパスを入力しても通らず、
Permission denied (publickey,password,keyboard-interactive)
fatal:Could not read from remote repository
となります。
原因が分かるようでした教えていただきたいです。
よろしくお願いします
まよさんコメントありがとうございます!
クローンを実施したらPermissionエラーが発生してしまった状況とのことですね。
Permissionエラーが発生した場合は殆どがSSH接続に用いるための、作成した鍵に問題がある場合があるので、鍵を生成しなおすことで解決する場合が多いです。
あとはこれはWindowsとかよりもMacに多いことではあるのですが、秘密鍵がロードできていないので、Permissionエラーが発生するということもあります。
手順的にはまず秘密鍵のロードをやってダメだったら、鍵の再作成をしてもう一度秘密鍵のロードコマンドを実施するという感じでやってみてください。
1.秘密鍵のロード
==============================
GitBashにて以下のコマンドを実施します。
> eval
ssh-agent
> ssh-add ~/.ssh/id_rsa
「Identity added …」と表示されたら再度クローンを実施します。
2. 鍵の再生成
==============================
まず、GITBASH にて[ssh-keygen]コマンドで鍵を再作成します。
記事ですと「ssh-keygen -t rsa -b 4096 -C “test-user@gmail.com”」がそれです。
(パスフレーズを忘れないように、また [Overwrite?] ときかれたら [y] を入力してください。)
“id_rsa” と “id_rsa.pub” というファイルが再作成されていると思いますので、”id_rsa.pub” ファイルの内容をGitサーバーに用意してある、
「authorized_keys」に登録します。
登録したら1.の手順を行った後にクローンを実施してみてください。
こちらで解決しなかったらまた症状を詳しく教えていただければと思います
ただ、今は手元に環境がないので調査は大分遅くなってしまうかもれません。。。
よろしくお願いいたします。