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