我在远程服务器上有一个 GIT 存储库,我想通过 FTP 访问它。由于某些不幸的原因,服务器只允许主动模式 FTP 而不是被动模式。即,如果我使用 curl(与使用的相同客户端git clone
)直接下载文件,则以下命令有效:
curl -P - ftp://user:pass@server/file
但是-P -
取出会导致 curl 挂起直到超时。
问题是我不知道如何告诉git clone
FTP 使用活动模式。当我设置GIT_CURL_VERBOSE=1
并执行 agit clone ftp://user:pass@server/repo
时,我注意到它正在发送PASV
而不是像没有开关PORT
的 curl 一样挂起。-P -
我怎么告诉它不这样做?我阅读了一些有关该_netrc
文件的信息,但找不到通过它设置活动模式的示例。
对于任何好奇的人,这里是详细的 curl 输出(与不指定选项git clone
的运行几乎相同。)curl
-P -
* About to connect() to server.com port 21 (#0)
* Trying {server ip}... * 0x98d548 is at send pipe head!
* Connected to server.com ({server ip}) port 21 (#0)
< 220 Microsoft FTP Service
> USER User
< 331 Password required for User.
> PASS {pass}
< 230 User User logged in.
> PWD
< 257 "/User" is current directory.
* Entry path is '/User'
> CWD repo.git
< 250 CWD command successful.
> CWD info
< 250 CWD command successful.
> EPSV
* Connect data stream passively
< 500 'EPSV': command not understood
* disabling EPSV usage
> PASV
< 227 Entering Passive Mode ({server ip},10,137).
* Trying {server ip}... * Connecting to {server ip} ({server ip}) port 2697
/* server hangs from here until time-out */
使用-P -
为 curl 指定的选项,PORT
将使用 command 代替PASV
,因此从该EPSV
行开始,以下命令将被发送到服务器:
> EPRT |1|{client ip}|13375|
< 500 'EPRT |1|{client public ip}|36093|': command not understood
* disabling EPRT usage
> PORT {client ip},52,64
< 200 PORT command successful.
* Connect data stream actively
> TYPE I
< 200 Type set to I.
> SIZE file
< 213 213
> RETR file
< 150 Opening BINARY mode data connection for file(213 bytes).
/* and the file just downloads from here. */
我的配置:msysgit,MS-FTP 服务器。