Windows で Git サーバーを構築する
なんで 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