• ホーム
  • 設定
  • 自宅サーバーのGitをリモートリポジトリにする

自宅サーバーのGitをリモートリポジトリにする

自宅サーバーにインストールしたgitをリモートリポジトリにして、SSHでアクセスします。サーバーはCentOS7です。クライアントはGit for Windowsです。

目次

  1. SSHの鍵を作る
  2. サーバーの設定をする
  3. 試してみる

SSHの鍵を作る

SSHでアクセスするために、公開鍵と秘密鍵を作ります。

WindowsでGit for Windowsのgit bashを起動して、鍵を生成します。

$ ssh-keygen -t rsa

git bashのホームディレクトリに.sshというディレクトリができて、その中に鍵のファイルが2つできるはずです。

サーバーの設定をする

リモートリポジトリにするgitサーバーの側の設定をします。

これはサーバーにログインして行う作業です。

まず、Git用のユーザーを作ります。

$ sudo adduser git-user
$ sudo passwd git-user

公開鍵を登録します。

$ su git-user
$ cd
$ mkdir .ssh

上記で作った鍵のファイルのうち、id_rsa/pubをWindowsからサーバーにコピーします。 コピーしたら鍵を登録します。

$ cat id_rsa.pub >> ~/.ssh/authorized_keys

リモートリポジトリを置くディレクトリを作ります。 作ったディレクトリのオーナーとユーザーをGit用のユーザーにします。

$ sudo mkdir /var/lib/git
$ cd /var/lib
$ sudo chown git-user -R git
$ sudo chgrp git-user -R git

Gitのシェルを変更します。セキュリティ用です。自宅サーバーだと必要ないかもしれませんが。

git-shellがどこにあるかをwhichというコマンドで調べます。 /etc/passwdのgitのところのシェルを、whichで調べたコマンドに書き換えます。

$ which git-shell
/usr/bin/git-shell
$ sudo nano /etc/passwd
git:x:1000:1000::/home/git-user:/usr/bin/git-shell

試してみる

リポジトリを作って試してみましょう。

testというリポジトリを作ります。これはサーバーで行う作業です。

$ cd /var/lib/git
$ mkdir test
$ cd test
$ git init --bare --shared
Initialized empty shared Git repository in /var/lib/git/test/

git initというコマンドはローカルのリポジトリを作る際にも使うものですが、リモートリポジトリを作るときはbareを、複数アカウントで共有するときはsharedというオプションを付けます。

すると、リモートリポジトリに必要なファイルが作られます。

$ ls -al
合計 16
drwxrwsr-x. 7 git-user git-user  119  2月 26 17:58 .
drwxr-xr-x. 3 git-user git-user   18  2月 26 17:57 ..
-rw-rw-r--. 1 git-user git-user   23  2月 26 17:58 HEAD
drwxrwsr-x. 2 git-user git-user    6  2月 26 17:58 branches
-rw-rw-r--. 1 git-user git-user  126  2月 26 17:58 config
-rw-rw-r--. 1 git-user git-user   73  2月 26 17:58 description
drwxrwsr-x. 2 git-user git-user 4096  2月 26 17:58 hooks
drwxrwsr-x. 2 git-user git-user   21  2月 26 17:58 info
drwxrwsr-x. 4 git-user git-user   30  2月 26 17:58 objects
drwxrwsr-x. 4 git-user git-user   31  2月 26 17:58 refs

サーバー側の準備が終わりましたので、クライアント側での作業をします。

Git for WindowsのSSHの設定ファイルを書き換えます。 アドレスとポート番号は、サーバーのSSHの設定に合わせてください。

C:\Program Files\Git\etc\ssh\ssh_config

Host gitlocal
  User git-user
  HostName 192.168.xxx.xxx
  IdentityFile ~/.ssh/id_rsa
  Port 123456
  IdentitiesOnly yes

Windowsのgit bashで、プッシュしたいリポジトリのディレクトリに移動します。 移動したら、リモートリポジトリを登録します。 git remote addが追加、git remote -vが登録されている内容の表示のコマンドです。

$ git remote add origin ssh://gitlocal/var/lib/git/test
$ git remote -v
origin  ssh://gitlocal/var/lib/git/test (fetch)
origin  ssh://gitlocal/var/lib/git/test (push)

ではプッシュしてみます。

$ git push origin master
git-user@192.168.xxx.xxx's password:
Enumerating objects: 3, done.
Counting objects: 100% (3/3), done.
Delta compression using up to 8 threads
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 286 bytes | 47.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To ssh://gitlocal/var/lib/git/test
 * [new branch]      master -> master

うまくいったのかな?

では、クローンしてみましょう。

$ mkdir gittest2
$ cd gittest2

$ git clone ssh://gitlocal/var/lib/git/test
Cloning into 'test'...
git-user@192.168.xxx.xxx's password:
remote: Counting objects: 3, done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Receiving objects: 100% (3/3), done.

$ ls -al
total 0
drwxr-xr-x 1 xx xx 0 2月  26 19:07 ./
drwxr-xr-x 1 xx xx 0 2月  26 19:06 ../
drwxr-xr-x 1 xx xx 0 2月  26 19:07 test/
$ cd test
$ ls -al
total 1
drwxr-xr-x 1 xx xx   0 2月  26 19:07 ./
drwxr-xr-x 1 xx xx   0 2月  26 19:07 ../
drwxr-xr-x 1 xx xx   0 2月  26 19:07 .git/
-rw-r--r-- 1 xx xx 208 2月  26 19:07 a.txt

クローンを実行したディレクトリにリモートリポジトリの名前のディレクトリができて、そこがGitで管理されるという感じですね。

プッシュされたファイルがクローン先にも展開されました。

公開日

広告