зеркало из https://github.com/microsoft/git.git
Merge branch 'tq/git-ssh-command'
Allow passing extra set of arguments when ssh is invoked to create an encrypted & authenticated connection by introducing a new environment variable GIT_SSH_COMMAND, whose contents is interpreted by shells. This is not possible with existing GIT_SSH mechanism whose invocation bypasses shells, which was designed more to match what other programs with similar variables did, not necessarily to be more useful. * tq/git-ssh-command: git_connect: set ssh shell command in GIT_SSH_COMMAND
This commit is contained in:
Коммит
09d60d785c
|
@ -881,19 +881,21 @@ other
|
|||
and the `core.editor` option in linkgit:git-config[1].
|
||||
|
||||
'GIT_SSH'::
|
||||
If this environment variable is set then 'git fetch'
|
||||
and 'git push' will use this command instead
|
||||
of 'ssh' when they need to connect to a remote system.
|
||||
The '$GIT_SSH' command will be given exactly two or
|
||||
four arguments: the 'username@host' (or just 'host')
|
||||
from the URL and the shell command to execute on that
|
||||
remote system, optionally preceded by '-p' (literally) and
|
||||
the 'port' from the URL when it specifies something other
|
||||
than the default SSH port.
|
||||
'GIT_SSH_COMMAND'::
|
||||
If either of these environment variables is set then 'git fetch'
|
||||
and 'git push' will use the specified command instead of 'ssh'
|
||||
when they need to connect to a remote system.
|
||||
The command will be given exactly two or four arguments: the
|
||||
'username@host' (or just 'host') from the URL and the shell
|
||||
command to execute on that remote system, optionally preceded by
|
||||
'-p' (literally) and the 'port' from the URL when it specifies
|
||||
something other than the default SSH port.
|
||||
+
|
||||
To pass options to the program that you want to list in GIT_SSH
|
||||
you will need to wrap the program and options into a shell script,
|
||||
then set GIT_SSH to refer to the shell script.
|
||||
`$GIT_SSH_COMMAND` takes precedence over `$GIT_SSH`, and is interpreted
|
||||
by the shell, which allows additional arguments to be included.
|
||||
`$GIT_SSH` on the other hand must be just the path to a program
|
||||
(which can be a wrapper shell script, if additional arguments are
|
||||
needed).
|
||||
+
|
||||
Usually it is easier to configure any desired options through your
|
||||
personal `.ssh/config` file. Please consult your ssh documentation
|
||||
|
|
15
connect.c
15
connect.c
|
@ -700,14 +700,23 @@ struct child_process *git_connect(int fd[2], const char *url,
|
|||
|
||||
conn->in = conn->out = -1;
|
||||
if (protocol == PROTO_SSH) {
|
||||
const char *ssh = getenv("GIT_SSH");
|
||||
int putty = ssh && strcasestr(ssh, "plink");
|
||||
const char *ssh;
|
||||
int putty;
|
||||
char *ssh_host = hostandport;
|
||||
const char *port = NULL;
|
||||
get_host_and_port(&ssh_host, &port);
|
||||
port = get_port_numeric(port);
|
||||
|
||||
if (!ssh) ssh = "ssh";
|
||||
ssh = getenv("GIT_SSH_COMMAND");
|
||||
if (ssh) {
|
||||
conn->use_shell = 1;
|
||||
putty = 0;
|
||||
} else {
|
||||
ssh = getenv("GIT_SSH");
|
||||
if (!ssh)
|
||||
ssh = "ssh";
|
||||
putty = !!strcasestr(ssh, "plink");
|
||||
}
|
||||
|
||||
argv_array_push(&conn->args, ssh);
|
||||
if (putty && !strcasestr(ssh, "tortoiseplink"))
|
||||
|
|
Загрузка…
Ссылка в новой задаче