You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用isomorphic-git执行git.clone报错ECONNREFUSED,求无需git pull的解决方案

解决isomorphic-git clone时的ECONNREFUSED 127.0.0.1:80错误

核心原因与修复方案

1. 替换http模块为https模块

你当前使用Node.js的http模块处理HTTPS协议的GitHub仓库地址,这会导致请求处理异常,进而触发本地连接拒绝错误。

修改代码如下:

import * as git from 'isomorphic-git';
import * as fs from 'fs';
import * as https from 'https'; // 替换原http模块为https

const git_options = {
    fs,
    http: https, // 使用https模块处理HTTPS请求
    dir: config.git_dir,
};

const remote_repo = 'owner/repo';

await git.clone({ ...git_options, url: `https://github.com/${remote_repo}.git`, ref: 'main' });

2. 显式强制执行checkout步骤

即使指定了ref参数,也可以通过checkout: true强制isomorphic-git在克隆后生成工作树,避免出现仅有仓库数据无工作文件的情况:

await git.clone({
    ...git_options,
    url: `https://github.com/${remote_repo}.git`,
    ref: 'main',
    checkout: true // 明确触发工作树创建
});

3. 清理不完整的残留仓库

如果目标目录已存在不完整的.git仓库(无工作树),isomorphic-git的克隆逻辑会异常。先清理目录再重新克隆:

// 清理目标目录
if (fs.existsSync(config.git_dir)) {
    fs.rmSync(config.git_dir, { recursive: true, force: true });
}
fs.mkdirSync(config.git_dir, { recursive: true });

// 重新执行克隆
await git.clone({
    ...git_options,
    url: `https://github.com/${remote_repo}.git`,
    ref: 'main'
});

4. 禁用代理(如果有环境代理干扰)

若你的运行环境配置了代理,可能导致请求被错误转发到本地。在配置中显式禁用代理:

const git_options = {
    fs,
    http: https,
    dir: config.git_dir,
    proxy: undefined // 强制禁用代理
};

验证

修改后执行代码,目标目录应直接生成完整的工作树文件,无需额外执行git pull操作。

内容的提问来源于stack exchange,提问作者Jim

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 01:31:19