Nimbin[12]?Web & Tools / Git-Server / Makefile

Git-Server git · main

gitsync + this read-only git browser

git php bash apache self-hosted · first commit 2026-10-05 · last commit 2026-10-06 (3 days ago) · synced 3 days ago

PHP 77.1% CSS 11.4% Markdown 8.6% Makefile 2.9%
git clone https://git.christianimmanuel.de/web-tools/Git-Server.gitwget https://git.christianimmanuel.de/web-tools/Git-Server/archive/Git-Server.tar.gz
Makefile 2.8 KB · 54 lines raw
# gitsync - 100% Vibecode but tested
PREFIX  ?= /usr
BINDIR   = $(PREFIX)/bin
CONF     = $(HOME)/.config/gitsync/gitsync.conf
HOST    ?= debian@162.19.227.194
REMOTE  ?= /var/www/html/git.christianimmanuel.de

.PHONY: install uninstall config config-update deploy deploy-web deploy-apache clean ssh-key cron cron-daily uncron
KEY      = $(HOME)/.ssh/gitsync_ed25519
CRON     = 0 12 * * * ping -c1 -W5 162.19.227.194 >/dev/null 2>&1 && $(BINDIR)/gitsync -q

install:              ## install gitsync to /usr/bin (needs root)
	install -Dm755 gitsync $(DESTDIR)$(BINDIR)/gitsync

uninstall:            ## remove gitsync
	rm -f $(DESTDIR)$(BINDIR)/gitsync

config:               ## copy example config to ~/.config/gitsync (does not overwrite)
	@test -f $(CONF) && echo "$(CONF) exists, not touching it" || (install -Dm644 gitsync.conf $(CONF) && echo "created $(CONF)")

config-update:        ## overwrite ~/.config/gitsync/gitsync.conf with the shipped one (keeps a .bak)
	@test -f $(CONF) && cp $(CONF) $(CONF).bak && echo "backup at $(CONF).bak" || true
	install -Dm644 gitsync.conf $(CONF)

deploy-web:           ## upload only index.php + style.css
	rsync -a web/index.php web/style.css $(HOST):$(REMOTE)/

deploy-apache:        ## upload apache configs (http, https, shared) to /tmp on the server
	scp apache/git.christianimmanuel.de.conf apache/git.christianimmanuel.de-le-ssl.conf apache/git.christianimmanuel.de-common.conf $(HOST):/tmp/
	@echo "on the server: sudo mv /tmp/git.christianimmanuel.de*.conf /etc/apache2/sites-available/ && sudo apache2ctl configtest && sudo systemctl reload apache2"

deploy: deploy-web deploy-apache

ssh-key:              ## create the upload key and print what to do on the server
	@test -f $(KEY) || ssh-keygen -t ed25519 -N "" -C gitsync -f $(KEY)
	@echo; echo "on the server (as root):"; echo "  adduser --disabled-password --gecos '' git-local"
	@echo "  install -d -m700 -o git-local -g git-local /home/git-local/.ssh"
	@echo "  echo 'restrict,port-forwarding $$(cat $(KEY).pub)' > /home/git-local/.ssh/authorized_keys"
	@echo "  chown git-local:git-local /home/git-local/.ssh/authorized_keys; chmod 600 /home/git-local/.ssh/authorized_keys"
	@echo "  chown -R git-local:www-data $(REMOTE)/repos"
	@echo; echo "then: ssh -i $(KEY) git-local@162.19.227.194 true"

cron:                 ## sync daily at 12:00 when the server is reachable
	@( crontab -l 2>/dev/null | grep -v '/gitsync -q'; echo "$(CRON)" ) | crontab -
	@crontab -l | grep gitsync

cron-daily:           ## system-wide alternative: /etc/cron.daily/gitsync (run as root, set USER= inside)
	install -m755 cron/gitsync /etc/cron.daily/gitsync

uncron:               ## remove the cron job
	@crontab -l 2>/dev/null | grep -v '/gitsync -q' | crontab - ; echo "removed"

clean:                ## remove local staging cache
	rm -rf $(HOME)/.cache/gitsync