【问题标题】:Git server cannot push. Unable to create temporary object directoryGit 服务器无法推送。无法创建临时对象目录
【发布时间】:2023-01-19 02:53:53
【问题描述】:

下午好,

我正在尝试建立自己的托管 git 服务器,但在使用 HTTPs 配置 git 选项时遇到了问题。

我已经安装了 nginx 和 fastcgi。这些是 git 文件的以下配置

/etc/nginx/nginx.conf

user www-data;
worker_processes auto;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;

events {
        worker_connections 768;
}

http {
        sendfile on;
        tcp_nopush on;
        types_hash_max_size 2048;
        server_tokens off;

        include /etc/nginx/mime.types;
        default_type application/octet-stream;

        ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; # Dropping SSLv3, ref: POODLE
        ssl_prefer_server_ciphers on;

        access_log /var/log/nginx/access.log;
        error_log /var/log/nginx/error.log;

        gzip on;

        include /etc/nginx/conf.d/*.conf;
        include /etc/nginx/sites-enabled/*;

        server {
                listen 80;
                listen [::]:80;

                return 301 https://$host$request_uri;
        }
}

/etc/nginx/sites-available/default (linked to /etc/nginx/sites-enabled/default)

server {
        listen 443 ssl default_server;
        listen [::]:443 ssl default_server;

        ssl_certificate /etc/letsencrypt/live/[redacted]/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/[redacted]/privkey.pem;

        root /var/www/html;
        server_name [redacted] www.[redacted];
}

/etc/nginx/sites-available/git (same as before, linked)

git@localhost:/$ cat /etc/nginx/sites-available/git 
server {
        listen 443 ssl;
        listen [::]:443 ssl;

        ssl_certificate /etc/letsencrypt/live/[redacted]/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/[redacted]/privkey.pem;

    server_name git.[redacted];

    auth_basic "login";
    auth_basic_user_file "/var/www/html/git/.htpasswd";
    location ~ ^.*\.git/(HEAD|info/refs|objects/info/.*|git-(upload|receive)-pack)$ {
        client_max_body_size 0;
        include /etc/nginx/fastcgi_params;
        fastcgi_param SCRIPT_FILENAME /usr/lib/git-core/git-http-backend;
        fastcgi_param GIT_HTTP_EXPORT_ALL "";
        fastcgi_param GIT_PROJECT_ROOT /git;
        fastcgi_param REMOTE_USER $remote_user;
        fastcgi_param PATH_INFO $uri;
        fastcgi_pass  unix:/var/run/fcgiwrap.socket;
    }
}

每次我尝试推送一些提交时,我都会得到:

error: remote unpack failed: unable to create temporary object directory
To https://git.[redacted]/[repo]
! [remote rejected] main -> main (unpacker error)
error: failed to push some refs to https://git.[redacted]/[repo]

分配 git 项目的目录完全由 git 用户拥有(这可能是问题所在)?

  • 多次重新启用这两项服务。
  • 重构 /etc/nginx/sites-available/git 和默认值。
  • 为 auth_basic 重置用户
  • 文件夹的所有权。
  • 更改分支。

【问题讨论】:

  • 我不是使用 nginx 进行这些设置的专家,但您的解释中的基本问题是:当您推送时,哪个用户正在服务器上运行 git 进程?
  • 我终于设法让它工作了!你的评论让我清楚地改变了 repo 的权限......到 git:www-data!非常感谢先生!

标签: git nginx fastcgi nginx-config


【解决方案1】:

自己解决:

将 repo 的所有权设为 git:www-data。正如 @eftshift0 所指出的,或者至少是指导过的,问题是谁在运行 git 进程以及谁拥有 repo 之上的所有权!

因此,我将所有权更改为相应的用户:组。

谢谢!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-02-04
    • 1970-01-01
    • 2017-10-06
    • 1970-01-01
    • 2015-05-23
    • 1970-01-01
    • 2013-03-10
    • 2017-01-25
    相关资源
    最近更新 更多