コンテンツにスキップ

gitサーバ

概要

  • cgit
  • fcgiwrap
  • gitolite3

gitolite

インストール

公開鍵の設定

ssh接続確認

ssh gitolite3@サーバーのホスト名

再設定

sudo dpkg-reconfigure gitolite3

リポジトリ設定

git clone gitolite3@example.com:gitolite-admin
  • gitolite-admin/conf/gitolite.conf
repo test-cgit
    RW+     =   admin
git add conf/gitolite.conf
git commit -m "Add test-cgit repository"
git push

nginxがアクセスできるようにする

sudo usermod -aG gitolite3 www-data

sudo namei -l /var/lib/gitolite3/repositories/test-cgit.git
#sudo chmod 750 /var/lib/gitolite3
sudo chmod -R g+rX /var/lib/gitolite3/repositories
  • /etc/gitolite3/gitolite.rc
UMASK => 0027,

cgit設定

  • /etc/cgitrc
project-list=/etc/cgit/projects.list
scan-path=/var/lib/gitolite3/repositories

virtual-root=/

/etc/cgit/projects.listの作成

sudo install -d -m 755 /etc/cgit
  • /etc/cgit/projects.list
test-cgit.git

グループ変更を反映

sudo systemctl restart fcgiwrap
sudo systemctl restart nginx

nginx

  • /etc/nginx/sites-available/cgit
server {
    server_name git.example.com;

    location /cgit-css/ {
        alias /usr/share/cgit/;
    }

    # cgit CGI
    location / {
        include fastcgi_params;

        fastcgi_param SCRIPT_FILENAME /usr/lib/cgit/cgit.cgi;
        fastcgi_param SCRIPT_NAME     /;
        fastcgi_param PATH_INFO       $uri;

        fastcgi_pass unix:/run/fcgiwrap.socket;
    }
}
sudo ln -s /etc/nginx/sites-available/cgit \
    /etc/nginx/sites-enabled/

sudo nginx -t
sudo systemctl reload nginx

ホスト名解決

git.example.com

HTTPS

sudo certbot --nginx -d git.example.com

テストデータ追加

git clone gitolite3@example.com:test-cgit
cd test-cgit

echo "Gitolite + cgit test" > README.md
git add README.md
git commit -m "Initial test"
git push origin HEAD

参考

初期設定

$ git config --global user.name user1
$ git config --global user.email user1@example.com

$ git config --global core.ignorecase false
$ git config --global core.quotepath false

git config --global init.defaultBranch main

$ git config --global pull.rebase false

$ git config --global color.ui = auto

git config --global url.https://example.com/.insteadOf git@example.com:
git config --global --add url.https://example.com/.insteadOf ssh://git@example.com/

gitリポジトリ作成

sudo install -d -o root -g www-data -m 0750 /srv/git

sudo git init --bare --initial-branch=main /srv/git/example.git
sudo chown -R root:www-data /srv/git/example.git
#sudo chmod -R g+rX /srv/git/example.git

gitリポジトリにpush

git init -b main

echo "# example" > README.md
git add README.md

git commit -m "Initial commit"

git remote add origin /srv/git/example.git
git push -u origin main

リポジトリのクローン作成

次のコマンドを実行する。

$ git clone ssh://SERVER/DIR/NAME.git NAME

リポジトリにファイルを追加しない設定

次のファイルに指定する。

  • .gitignore

gitのadd取り消し

git restore --staged .

branch

git checkout -b test main
git push -u origin test

状態確認

status
show

git diff --name-only --cached
git diff ID
git log

patch

git format-patch --start-number NUMBER ID

git apply --check 0001-test.patch

patch -p1 < 0001-test.patch

書き換え

$ git commit --amend

$ git rebase -i HEAD~n
pickをeditに変更する
git commit --amend -s -m ""
git rebase --continue

git stash -u
git stash list
git stash apply stash@{0}
git stash apply stash@{0} --index
git stash drop stash@{0}
$ git reset --soft HEAD^
$ git reset --hard HEAD^
$ git reset HEAD FILENAME
$ git checkout HEAD FILENAME
$ git rm --cached -r FILENAME

$ git revert HEAD

$ git log --pretty=full

$ git filter-branch -f --env-filter '
  if [ "$GIT_COMMITTER_EMAIL" = "user1@example.com" ];
    then
      GIT_COMMITER_NAME="user2";
      GIT_AUTHOR_NAME="user2";
      GIT_COMMITER_EMAIL="user2@example.com";
      GIT_AUTHOR_EMAil="user2@example.com";
  fi'
$ git push -f