🐱

Windows で Git サーバーを構築する

2023/11/25に公開

なんで Git サーバー建てることになったの

個人で開発してるしょうもないツール類をバージョン管理したいということに
PC を切り替えてもいつでものぞけるようにリポジトリ置きたかったという。

GitHub でいいじゃん

まあそうなんすけど、あまりにもプライベートなもの(ほんとに自分しか使わない)なので、いくらプライベートリポジトリに置けばいいとはいえ、なんだかなぁと(個人PCのPATH直書きのソース置くのもなあと)

プライベートマシンに Git サーバーを建てましょう

ということで手持ちのマシンに Git サーバーを建てることにします。
マシンはその辺に転がってた intel NUC を使うことにします。
windows11 ですがめんどくさいのでそのまま使います。
ほんとは linux ぶち込んで使うのが楽だとおもうんですけど、Git 鯖だけなんでなんでもいいやの精神です。
ちなみに WSL は使いません。理由はポートフォワードとかめんどくさいからです。

その前にやっとくこと

  • クライアントマシンとサーバーマシンに git がインストール済み&設定済みであること
  • クライアントで ssh-keygen でキーペア作っとくこと

クライアント側でやること

git の環境設定

とりあえずコミットで使う名前とメアドをいれときましょう。適当でいいです

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

クライアントマシンが windows の場合、コミット時の改行コードをどうするか決めておきましょう

git config --global core.autocrlf false

true にすればチェックアウトで LF -> CRLF に、コミットで CRLF -> LF になります。
input にすればコミット時のみ CRLF -> LF になります。
自分は勝手に改行コードを変えてもらいたくないので false にします。

サーバー側でやること

GUI さわるので pro 使ってる人は RDP 有効にしといた方が楽です。

リポジトリをつくる

サーバー側にリポジトリを作ります。
その前に適当な場所にリポジトリ格納用のディレクトリをつくります (C直下のほうがいいかも。。)

C:\Users\<username>\repositories

次に格納用ディレクトリにリポジトリを作ります
ディレクトリ名は hogehuga.git みたいに末尾に .git を付けるのが慣例ぽいのでつけます

git init --bare hogehuga.git

叩くとリポジトリは以下のようになってるんじゃないかと思います

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d-----        2023/11/25     11:11                hooks
d-----        2023/11/25     11:11                info
d-----        2023/11/25     11:11                objects
d-----        2023/11/25     11:11                refs
-a----        2023/11/25     11:11            104 config
-a----        2023/11/25     11:11             73 description
-a----        2023/11/25     11:11             23 HEAD

これで作成と初期化までおわりです

ファイアーウォールの設定

windows のめんどくさい部分をさわっていきます
プライベートネットワークでしか使わないのでセキュリティ気にしてないので気を付けてください。
スタートメニューにファイアーウォールと打ち込むと、セキュリティが強化されたーみたいなファイアーウォールの項目が出てくるのでそれを開きます



そうすると左側に受信の規則があるのでそこから新しい規則をつくります
ポートを選びます。



次に TCP 選んで特定のローカルポート欄に 22 を入れます。プライベートネットワークなんで 22 にしてますが sshd_config とかでポートいじってる場合は適宜変えてください



あとは以下のようにぽちぽちします



ルール名と説明も適当にいれときます

公開鍵を登録する

クライアントでつくった公開鍵をサーバーに登録します

C:\Users\<username>\.ssh\authorized_keys

に追加します。
ディレクトリ or ファイルがなかったら作ってください

sshd を動かす

sshd を動かして ssh 接続できるようにします
ここにあるので叩きます

C:\Program Files\Git\usr\bin\sshd.exe

毎回起動時に叩くのはめんどくさいので、タスクスケジューラーに登録しときます






とりあえずサーバーの準備は終了です

プロジェクトをプッシュする

クライアントPC に戻って管理したいプロジェクトを初期化します

PS C:\Users\<username>\repo\hogehuga> git init

ファイルをステージします。必要あれば先に .gitignore 書くのわすれずに

PS C:\Users\<username>\repo\hogehuga> git add .
PS C:\Users\<username>\repo\hogehuga> git commit -m "Initial commit"

リモートリポジトリを設定します

git remote add origin [サーバーのユーザー名]@[サーバーのアドレス]:/c/Users/<username>/repositories/hogehuga.git

プッシュします

PS C:\Users\<username>\repo\hogehuga> git push -u origin master

これでうまくいけば終了です。

トラブルシューティング

自分の環境だとプッシュすると以下のようにおこられてうまくいきませんでした

PS C:\Users\<username>\repo\hogehuga> git push -u origin master
bash: line 1: git-receive-pack: command not found
fatal: Could not read from remote repository.

Please make sure you have the correct access rights

git-receive-pack が見つからんっていわれてますね。
サーバーで変更を受け取ってリポジトリに統合するために使われるコマンドぽいです
このコマンドの場所が環境変数に追加されてないのが原因なので探して追加します。
サーバーにもどって Git Bash 開いて which git-receive-pack で探すのが手っ取りばやいです。
見つかった場所を windows の環境変数のシステム環境変数の path に追加します。
sshd を再起動してもっかいプッシュするとうまくいくはずです。

まとめ

やっぱり windows でサーバーたてるのはめんどくさいので素直に linux つかいましょう!
、、というのは半分冗談なんですけど、こういうことするのは linux が一般的なので windows だと極端に情報が少なくなるのでなかなかめんどいです。
linux だと docker で Git Lab って選択肢もあるので。
という感じで windows で Git サーバーたてるぜって人の参考になれば。

Discussion