Git で共有リポジトリ
〜 CentOS8 版 〜
2021-02-12 作成 福島
TOP > tips > git-center
Git は、共有リポジトリを使うと、複数人で一つのリポジトリを使用することができます。

0. インストール要件
サーバ (共有リポジトリ)
項目内容備考
OSCentOS 8.3.2011本稿記述時の最新バージョン
IP アドレス192.168.11.100-
接続プロトコルsshssh の標準ポートは 22 番。本稿ではこれを明示して扱っている。
プロジェクトグループ名
project1-
共有リポジトリ/home/project1.git/Git で共有リポジトリを作成する場合は、
ディレクトリ名の末尾が ~.git と決められている。
メンバ 1IDdev1この ID を使用して共有リポジトリにアクセスする。
パスワードpassword-
ホームディレクトリ/home/project.users/dev1/メンバは通常ユーザで構わないが、本稿では別ディレクトリにまとめる。
・バックアップでは /home/project1.git/ を退避する。

クライアント (メンバ)
項目内容備考
OSCentOS 8.3.2011本稿記述時の最新バージョン
IP アドレス192.168.11.110本稿では使用しない。(クライアントが別の PC であることを明示しているのみ)
メンバ 1名前Who Ami-
メールアドレスwho@example.jp-

1. 共有リポジトリ設定 (サーバで操作)
1-1. Git のバージョンを確認
$ which git
/usr/bin/git
$ git --version
git version 2.27.0
1-2. 共有リポジトリの作成
$ su
# mkdir /home/project1.git
# groupadd project1
# chgrp project1 /home/project1.git/
# git init --bare --shared /home/project1.git/
Initialized empty shared Git repository in /home/project1.git/
# ls -ld /home/project1.git/
drwxrwsr-x. 7 root project1 119  2月 12 02:15 /home/project1.git/
パーミッションが 2775 になっている。
# exit
$
1-3. プロジェクト参加メンバを用意
1-3-1. プロジェクト参加メンバの収容ディレクトリを作成
$ su
# mkdir /home/project.users
1-3-2. プロジェクト参加メンバのアカウントを作成
# useradd dev1 -d /home/project.users/dev1
# usermod dev1 -a -G project1
# passwd dev1
ユーザー dev1 のパスワードを変更。
新しいパスワード: password
新しいパスワードを再入力してください: password
passwd: すべての認証トークンが正しく更新できました。
# exit
$

2. 利用設定 (クライアントで操作)
2-1. Git のバージョンを確認
$ which git
/usr/bin/git
$ git --version
git version 2.27.0
2-2. Git の利用情報を設定
$ git config --global user.email "who@example.jp"
$ git config --global user.name "Who Ami"
$ git config --global color.branch auto
$ git config --global color.diff auto
$ git config --global color.status auto
$ cat ~/.gitconfig
[user]
        email = who@example.jp
        name = Who Ami
[color]
        branch = auto
        diff = auto
        status = auto
2-3. 最新のファイル群をサーバから取り寄せる
$ git clone ssh://dev1@192.168.11.100:22/home/project1
(「:22」は省略が可能)
Cloning into 'project1'...
dev1@192.168.11.100's password: password
warning: You appear to have cloned an empty repository.

空っぽのリポジトリをクローンしたと警告されている。
まだファイルを一つも置いていないので、空っぽは当然。
$ ls -ld ./project1
drwxrwxr-x. 3 who who 18  2月 12 13:56 ./project1
clone によって、プロジェクトディレクトリが自動作成された。
(まだ空っぽだが) このディレクトリの中でファイル操作を行う。
$ cat ./project1/.git/config
[core]
        repositoryformatversion = 0
        filemode = true
        bare = false
        logallrefupdates = true
[remote "origin"]
        url = ssh://dev1@192.168.11.100:22/home/project1
        fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
        remote = origin
        merge = refs/heads/master
clone によって、設定ファイルも自動作成された。

以降 git push/pull 等のリモートリポジトリに対する操作は、この設定ファイルが標準情報となる。
2-4. テスト用ファイルを作成してサーバに転送する
$ cd ./project1/
project1$ date > ./test.txt
project1$ cat ./test.txt
2021年  2月 12日 金曜日 14:21:32 JST
project1$ git add ./test.txt
project1$ git commit -m "Created a test file"
[master (root-commit) 0c52fb9] Created a test file
 1 file changed, 1 insertion(+)
 create mode 100644 test.txt
project1$ git push
dev1@192.168.11.100's password: password
Enumerating objects: 3, done.
Counting objects: 100% (3/3), done.
Writing objects: 100% (3/3), 254 bytes | 254.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
To ssh://192.168.11.100:22/home/project1
 * [new branch]      master -> master
project1$ cd ..
$
2-5. 作成したテスト用ファイルを削除
$ cd ./project1
project1$ git rm test.txt
rm 'test.txt'
project1$ git commit -m "Remove a test file"
[master f665361] Remove test file
 1 file changed, 1 deletion(-)
 delete mode 100644 test.txt
project1$ git push
dev1@192.168.11.100's password: password
Enumerating objects: 3, done.
Counting objects: 100% (3/3), done.
Writing objects: 100% (2/2), 198 bytes | 198.00 KiB/s, done.
Total 2 (delta 0), reused 0 (delta 0), pack-reused 0
To ssh://192.168.11.100:22/home/project1
   8270e1f..f665361  master -> master
project1$ cd ..
$