3

FTP 経由でアクセスしたいリモート サーバーに GIT リポジトリがあります。いくつかの残念な理由により、サーバーはパッシブ モードではなくアクティブ モードの FTP のみを許可します。git cloneつまり、ファイルを直接ダウンロードするために curl (で使用されるのと同じクライアント) を使用すると、次のコマンドが機能します。

curl -P - ftp://user:pass@server/file

ただし、取り出すと、-P -タイムアウトまでカールがハングアップします。

git clone問題は、FTP にアクティブ モードを使用するように指示する方法がわからないことです。を設定GIT_CURL_VERBOSE=1して実行すると、代わりに送信され、スイッチなしでcurlのようにハングgit clone ftp://user:pass@server/repoすることに気付きました。それ以外の場合はどうすればいいですか?ファイルについて少し読みましたが、それを介してアクティブモードを設定する例が見つかりませんでした。PASVPORT-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 に指定されたオプションを使用すると、 PORTcommand が の代わりに使用される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 サーバー。

4

1 に答える 1

1

Gitは、おそらくそのような困難のために、実際にFTPを非推奨にしました。

Gitはssh、git、http、およびhttpsプロトコルをサポートします(さらに、ftpおよびftpsはフェッチに使用でき、rsyncはフェッチとプッシュに使用できますが、これらは非効率的で非推奨です。使用しないでください)。

最善の策は、FTPサーバーからローカルのベアクローンにリモートリポジトリをrsyncし、それを作業コピーに再クローンすることです。

于 2012-12-13T07:32:02.460 に答える