Gitリモートリポジトリ構築

ここでは、sshを経由してリポジトリの取得を行うGitサーバの構築手順を記載します。


sshサーバ構築手順

(サーバ操作)共用リポジトリを作成する。

gitの共用リポジトリを作る際は、「--bare」と「--share」オプションを指定します。

「--bare」はbareリポジトリを作成するという意味で、通常「.git」の下に作成される管理情報ファイルをカレントディレクトリに展開します。(リモートリポジトリではファイルは編集しないので、管理情報のみ存在させます。)


[server]$ mkdir repos.git
[server]$ cd repos.git
[server]$ git --bare init --share

(クライアント操作)ローカルにリポジトリを作成

ローカルリポジトリを作成します。

作業ディレクトリ(リポジトリに登録したいファイルが存在するディレクトリ)で下記コマンドを実行します。


[local]$ git init
[local]$ git add .
[local]$ git commit

(クライアント操作)ローカルリポジトリにリモートリポジトリを登録する。

ローカルリポジトリの反映先(push/pull)のデフォルト宛先を指定します。

この操作によって今後「git push」コマンドでURLを指定しなくても、指定済みのリモートリポジトリへの登録を行えるようになります。


[local]$ git remote add origin ssh://capm-network@capm-network.com/home/capm-network/repos.git
[local]$ git config branch.master.remote origin
[local]$ git config branch.master.merge refs/heads/master

実行内容は以下の通りです。

  • URLに「origin」という短縮名(ニックネーム)を付けます。(慣習上「origin」という名前が使われます。)
  • ローカルリポジトリ(masterブランチを指定)をリモートリポジトリ(origin)に対して反映するように「.git/config」に対して設定を行います。
  • ローカルリポジトリ(masterブランチを指定)をリモートリポジトリ(origin)から取得するように「.git/config」に対して設定を行います。

(クライアント操作)リモートリポジトリに送信する

ローカルリポジトリのコミット内容をリモートリポジトリに送信します。

初回の送信で失敗する場合には、URLを指定します。


[local]$ git push

デフォルトの送信先を設定していない場合には、送信先URLを指定します。


[local]$ git push ssh://capm-network@capm-network.com/home/capm-network/repos.git master

SSHトンネリングへの対応

ssh経由でコマンドを実行した場合、「.bashrc」等シェル設定ファイルが読み込まれないため、下記のようなエラーが発生します。


$ git push
bash: git-receive-pack: command not found
fatal: The remote end hung up unexpectedly

対処方法1

以下2点で対処できます。

  • 「.ssh/environment」にPATHを記述する。
  • 「/etc/ssh/sshd_config」の「PermitUserEnvironment」項目を「yes」にする。

対処方法2

sshトンネリングのPATHにシンボリックを張ります。


$ ln -s /home/capm-network/local/bin /home/capm-network/bin


リポジトリを取得する

(クライアント操作)リモートリポジトリを取得する


[local]$ git clone ssh://capm-network@capm-network.com/home/capm-network/repos.git

git://で取得したい

「ssh://」ではなく、「git://」でアクセス可能にするために「git-daemon」を設定してください。 git-daemonを利用すれば、gitプロトコル(git://)で通信できるサービスを登録することができます。



関連ページ