Hello, I'm trying to set up a git server on Debian 12, served by Nginx via https. I used this as a debian-specific starter though I have done this in the past using a FreeBSD and Apache type setup:
https://esc.sh/blog/setting-up-a-git-http-server-with-nginx/ The client is a windows 10 client. All goes right until I try to push changes to the server main branch and I get this: git push origin main Enumerating objects: 4, done. Counting objects: 100% (4/4), done. Writing objects: 100% (4/4), 276 bytes | 276.00 KiB/s, done. Total 4 (delta 0), reused 4 (delta 0), pack-reused 0 error: remote unpack failed: unable to create temporary object directory To https://git.domain.com/repo1.git ! [remote rejected] main -> main (unpacker error) error: failed to push some refs to 'https://git.domain.com/repo1.git' I've installed Nginx from the Nginx Debian repo so it's running as user Nginx not as www-data, but permissions are set to allow user nginx read/write to the /srv/git and subdirectories. Googling shows issues where a incoming-xxx directory under objects needs to be made as a sort-of-quarantine directory prior to commiting the files, I don't see that area at all. Specific commands used (server) apt install git nginx fcgiwrap mkdir -pv /srv/git cd /srv/git mkdir -pv repo1.git cd repo1.git git config --global init.defaultBranch "main" git init . --bare --shared git update-server-info Enable git push so http commits to the repository can be performed. Add the following entry to the /srv/git/repo1.git/config file [http] receivepack = true git config --bool core.bare true chown -R nginx:nginx /srv/git chmod -R 775 /srv/git nginx configuration file: server { listen 443 ssl http2; server_name git.domain.com; access_log /var/log/nginx/git.domain.access.log main; error_log /var/log/nginx/git.domain.error error; # TLS/SSL CONFIG # RSA certificates (dual config) ssl_certificate /etc/ssl/domain.com/domain.com.fullchain.crt; ssl_certificate_key /etc/ssl/domain.com/domain.com.key; # ECC/ECDSA certificates (dual config) ssl_certificate /etc/ssl/domain.com/domain.com.fullchain.crt.ecc; ssl_certificate_key /etc/ssl/domain.com/domain.com.key.ecc; ssl_session_cache shared:domainSSL:50m; ssl_dhparam /etc/ssl/domain.com/dhparams.pem; # This is where the repositories live on the server root /srv/git; index index.php index.html index.htm index.nginx-debian.html; location / { # First attempt to serve request as file, then # as directory, then fall back to displaying a 404. try_files $uri $uri/ =404; } location ~ (/.*) { client_max_body_size 0; auth_basic "Git Login"; auth_basic_user_file /etc/nginx/.gitpasswd; fastcgi_pass unix:/var/run/fcgiwrap.socket; include fastcgi_params; fastcgi_param SCRIPT_FILENAME /usr/lib/git-core/git-http-backend; # export all repositories under GIT_PROJECT_ROOT fastcgi_param GIT_HTTP_EXPORT_ALL ""; fastcgi_param GIT_PROJECT_ROOT /srv/git; fastcgi_param REMOTE_USER $remote_user; fastcgi_param PATH_INFO $1; } # Directives to send expires headers and turn off 404 error logging. location ~* ^.+\.(css|js|ogg|ogv|svg|svgz|eot|otf|woff|mp4|ttf|rss|atom|jpg|jpeg|gif|png|ico|zip|tgz|gz|rar|bz2|doc|xls|exe|ppt|tar|mid|midi|wav|bmp|rtf)$ { access_log off; log_not_found off; expires max; } # Pass PHP Scripts To FastCGI Server location ~ \.php$ { fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_pass unix:/run/php/php8.2-fpm.sock; #depends on PHP versions fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } } Specific commands used (client) mkdir my-project cd my-project git init git remote add origin https://git.domain.com/repo1.git mkdir dev echo "This is a test file" > dev/file git add . git commit -a -m "Add files and directories" git push origin main If anyone has any suggestions I'd appreciate them. Thanks. Dave.