自宅サーバーのGitをリモートリポジトリにする
自宅サーバーにインストールしたgitをリモートリポジトリにして、SSHでアクセスします。サーバーはCentOS7です。クライアントはGit for Windowsです。
目次
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で管理されるという感じですね。
プッシュされたファイルがクローン先にも展開されました。
公開日
広告
設定カテゴリの投稿
- Apache2.4で行ったセキュリティ関係の設定
- CentOS7にgitをインストールする
- CentOS7にsamba 4.8をインストールする
- CentOS7のApacheでDjangoを動かしてみた
- Gitでバージョン管理をしてみた
- LogWatchでログを確認する
- Python3のCGIで日本語を出力する
- Raspberry Piにgitをインストールする
- サイトマップを作る
- プログラムのCPU使用を制限する
- 仮想マシンにCentOS7をインストールしてApache2.4とDjango2.0をセットアップする
- 仮想マシンのCentOS7にLaTeXとGhostScriptとImageMagickをインストール
- 自宅サーバーのGitをリモートリポジトリにする