Gitサーバーの構築と指定ディレクトリへの同期

📢 この記事は ChatGPT によって翻訳されました

はじめに

Gitを使えば、友人とのコード管理や同期が簡単になります。特に静的サイトが好きな筆者にとっては、GitでWebファイルを同期できるのは非常に便利です。

Gitのインストール

ROOTユーザーで以下のコマンドを順に実行:

1
2
yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel perl-devel
yum install git

ユーザーの作成

Gitサービス用に専用のユーザーとグループを作成します。

1
2
groupadd git
useradd git -g git

公開鍵の取得

ローカルPC(Windows)の公開鍵は %UserProfile%/.ssh/ にある id_rsa.pub ファイルです。

ファイルが存在しない場合、cmdで以下を実行:

1
ssh-keygen

これにより鍵ペアが生成されます。

公開鍵の登録

生成した公開鍵を /home/git/.ssh/authorized_keys に1行ずつ追加します。ファイルが存在しない場合は以下で作成:

1
2
3
4
5
cd /home/git/
mkdir .ssh
chmod 755 .ssh
touch .ssh/authorized_keys
chmod 644 .ssh/authorized_keys

vi などで鍵を貼り付けて保存します。

Gitリポジトリの初期化

Gitリポジトリのディレクトリを /home/gitrepo/repo.git にします:

1
2
3
4
5
cd /home
mkdir gitrepo
chown git:git gitrepo
cd gitrepo
git init --bare repo.git

その後、リポジトリの所有者を変更:

1
chown -R git:git repo.git

リポジトリのクローン

1
git clone git@サーバーIP:/home/gitrepo/repo.git

ディレクトリへの自動同期

Gitのhook機能を使います。

1
2
cd /home/gitrepo/repo.git/hooks
vi post-receive

以下のように記述:

1
2
#!/bin/sh
git --work-tree=/home/www/hexo --git-dir=/home/gitrepo/repo.git checkout -f

ファイルに実行権限を付与:

1
2
chmod +x post-receive
chown -R git:git /home/gitrepo/repo.git

コードの更新

単純にローカルコードを更新するだけなら:

1
git pull

正式な手順:

1
2
3
4
5
git status
git checkout -- [ファイル名]
git branch
git checkout リモートブランチ名
git pull

その他コマンド

1
2
3
4
git branch               # ブランチ一覧
git checkout aaa         # aaaブランチへ切り替え
git branch aaa           # aaaブランチ作成
git checkout -b aaa      # aaaブランチ作成&切り替え

gitユーザーのシェルログインを禁止

セキュリティ上の理由から、git ユーザーのシェルログインを無効化:

1
vi /etc/passwd

以下のように変更:

1
2
-git:x:1004:1004::/home/git:/bin/bash
+git:x:1004:1004::/home/git:/usr/bin/git-shell

これでgitユーザーはSSHでGitを使用できますが、シェルにはログインできません。

参考リンク

This post is licensed under CC BY-NC-SA 4.0 by the author.

Visits Since 2025-02-28

Hugo で構築されています。 | テーマ StackJimmy によって設計されています。