Macとかの雑記帳

Macにgitサーバーを構築してgit://(gitプロトコル)でアクセスできるようにする方法

Macにgitサーバーを構築して、ついでにgit://でアクセスできるようにする方法です。Linuxのように専用のパッケージが無いっぽいので.plistを作成してgitプロトコルを使えるようにしてます。

環境構築関係は記事にしておかないと忘れるので備忘録です。

ローカルリポジトリの作成

例として、デスクトップにgit-testというフォルダを作成してgitで管理するようにします。

gsv02

 

フォルダを作成したらgit-testに移動します。

$ cd ~/Desktop/git-test

 

移動したら、以下を実行してgitで管理するようにします。

$ git init

上のコマンドを実行すると.gitという不可視フォルダが作成され、gitで管理できるようになります。

gsv03

 

次に適当なファイルを作成します。ファイル名は何でもかまいません。

$ touch README

 

ファイルを作成したらgitに追加。

$ git add .

 

最後にコミット。

$ git commit -m "test"

 

実際の操作は以下のようになります。

gsv04

gitサーバーの構築

例としてホームディレクトリにgitというフォルダを作成し、そこをサーバーとして公開するようにします。

git server

 

フォルダを作成したらgitフォルダに移動します。

$ cd ~/git

 

移動したら、先ほど作成した「git-test」のデータを格納する場所を作ります。フォルダ名は何でも構わないのですが、管理しやすいように同じ名前にしておいた方が良いと思います。名前の後に.gitをつけるのが習わしのようです。

$ mkdir git-test.git

gsv05

 

作成した「git-test.git」に移動し…

$ cd ~/git/git-test.git

 

gitサーバーとして公開できるようにします。--bareをつけて$ git initを実行します。

$ git --bare init

 

上のコマンドを実行すると、通常は.gitフォルダ内に作成されるデータ格納用のファイル等が可視状態で作成されます。これは公開リポジトリと呼ばれるもので、サーバーとして機能するためのリポジトリです。

gsv06

 

実際の操作は以下のようになります。

gsv07

SSHの設定

:後述するgit://で接続する場合は、この設定は不要です。

gitサーバーとの接続にはSSHを使っているので、設定しておかないと接続に失敗する場合があります。毎回パスワードを入力するのは面倒なので、パスワードなしの公開鍵を作成して登録してます。

最初に~/.sshフォルダに移動します。無い場合は作成してください。

$ cd ~/.ssh

 

次に公開鍵を作成します。

$ ssh-keygen -t rsa

上のコマンドを実行したら return を3回ほど連打しときます。パスワードを設定しないので空のままで構いません。

鍵を作成したらauthorized_keysファイルに登録します。

$ cat id_rsa.pub >> authorized_keys

gsv10

 

鍵を登録したら「システム環境設定 → 共有」内の「リモートログイン」をONにします。

gsv09

このとき、上の囲ってある部分のアドレスを控えておきます。後でgitサーバーに接続する際に必要になります。

Macでもgit://で接続できるようにする

gitサーバーへの接続にgitプロトコル(git://)を使うようにすれば、sshの設定は不要になります。sshでの接続に抵抗がある方は設定しておいた方がいいと思います。

gitをデーモンとして起動すればいいだけなので、専用の.plistを作成してMacにログインした際に自動で起動させるようにします。

.plistを設置する~/Library/LaunchAgentsに移動します。

$ cd ~/Library/LaunchAgents

 

gitをデーモンとして常駐させる.plistを作成します。

$ vi com.git-daemon-run

 

15行目のパスは環境にあわせて変更してください。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>KeepAlive</key>
	<false/>
	<key>Label</key>
	<string>com.git-daemon-run</string>
	<key>ProgramArguments</key>
	<array>
		<string>git</string>
		<string>daemon</string>
		<string>--export-all</string>
		<string>--enable=receive-pack</string>
		<string>--base-path=/Users/kikaigyo/git</string>
	</array>
	<key>RunAtLoad</key>
	<true/>
	<key>ServiceDescription</key>
	<string>com.git-daemon-run</string>
</dict>
</plist>

com.git-daemon-run.plist · GitHub

ファイルを作成したら以下を実行し、ログイン時に自動で起動させます。

$ launchctl load -w com.git-daemon-run.plist

リポジトリのデータをgitサーバーにアップする

最初に作成したローカルリポジトリに移動します。

$ cd ~/Desktop/git-test

移動したら、作成したサーバーのアドレスを登録します。

 

SSHで接続する場合

控えておいたアドレスデータの格納先と入力します。

$ git remote add origin kikaigyo@kikaigyo.local:git/git-test.git

 

git://で接続する場合

git://ホスト名(IPアドレスでも可)/データの格納先と入力します。

$ git remote add origin git://kikaigyo.local/git-test.git

:前述の.plistで~/gitを指定しているので、sshと違いgitサーバー側のリポジトリ名だけでOKです。

 

アドレスを登録したらサーバーにデータをプッシュ(アップ)します。

$ git push origin master

 

成功すれば下のように* [new brach]と表示されます。

SSH

gsv08

 

git://

動作テスト

例として~/Documentsフォルダに「git-test」リポジトリのクローンを作成します。

Documentsフォルダに移動し…

$ cd ~/Documents

 

クローンを作成します。

SSH

$ git clone kikaigyo@kikaigyo.local:git/git-test.git

git://

$ git clone git://kikaigyo.local/git-test.git

gsv11

gsv13

 

無事クローンを作成できたら、適当なファイルを追加してアップできるかどうかテストします。例として、test.txtというファイルを追加します。

$ touch test.txt

 

ファイルを作成したらgitに追加。

$ git add .

 

次にコミット。

$ git commit -m "add test.txt"

 

gitサーバーに変更をプッシュ。

$ git push

成功すれば下のようになります。

gsv12

ネット回線越しに別PCから接続

下は、LAN内にある別PCのUbuntuに「git-test」リポジトリのクローンを作成したところです。gitサーバーとして問題無く機能してくれているようです。

gsv16

 

Ubuntuに作成したクローン内でファイルを変更し、Mac上のgitサーバーに変更をプッシュしても問題無く反映されています。

gsv17

スポンサード リンク