Pergunta

Eu instalei e configurei com sucesso e configurei o MSYSGIT portátil na minha unidade flash e usei -o para puxar e empurrar os repositórios do GitHub. No entanto, pareço sempre ter que kludge o apoio do SSH.

Especificamente, para que o SSH encontre meus arquivos de chaves, tenho que seguir estas instruções Para iniciar uma segunda instância de ssh-agent e depois ssh-add minha chave toda vez que eu corro Git-bash.bat.

Usando a saída de ssh -v git@github.com Para depurar, vejo que o MSYSGIT é os padrões do meu diretório de usuário do Windows para procurar teclas. Não pode fazer isso; Eu preciso que ele procure em seu próprio diretório na unidade portátil.

Como posso forçar $ casa a ser a própria pasta do programa?

Atualização para Link Broken Vox

Instruções de esta página são semelhantes ao link agora quebrado que publiquei originalmente. Citado abaixo. Também aqui está o webarchive do artigo Vox original.

No entanto, se você tentar isso e obter:

% ssh-add
Could not open a connection to your authentication agent. 

Então sua sessão não está funcionando sob o SSH-Agent. Você pode contornar isso reiniciando um novo shell sob o agente executando:

exec ssh-agent bash 

onde você pode substituir a festa pela concha de sua escolha. Depois de fazer isso, você poderá executar o SSH-Add para carregar sua chave para esse shell.

Foi útil?

Solução

O comando usado para lançar o git bash é:

C:\Windows\SysWOW64\cmd.exe /c ""C:\Prog\Git\1.7.1\bin\sh.exe" --login -i"

Acabei de experimentar o seguinte em uma sessão do DOS:

C:\>C:\Windows\SysWOW64\cmd.exe /c ""C:\Prog\Git\1.7.1\bin\sh.exe" --login -i"
VonC@XXX /c/
$ echo $HOME
/c/Users/VonC

Por padrão, $ home $%homepath%, mas se eu forçar%home%:

set HOME=/another/path

e depois inicie a mesma sessão Bash:

C:\>C:\Windows\SysWOW64\cmd.exe /c ""C:\Prog\Git\1.7.1\bin\sh.exe" --login -i"
VonC@XXX /c/
$ echo $HOME
/another/path

Então, se você embrulhar a chamada BASH por um script que configura a casa para:

  • %~dp0 : O caminho do invólucro em sua chave USB
  • ou %~d1\your\path: com %~d1 sendo a letra de acionamento (da sua chave USB se o seu invólucro estiver nela)

, você deve poder forçar o lar de qualquer valor necessário.


Nota (novembro de 2011): desde então, o OP DGW escreveu o dele próprio invólucro:

git-bash-portable.bat:

@echo off
rem Copyright (C): 2010 Voyagerfan5761
rem http://technobabbl.es/

set USERPROFILE=%~dp0
set HOMEDRIVE=%~d0
set HOMEPATH=%~p0
set HOME=%~dp0
set HISTFILE=%USERPROFILE%.bash_history
rem set BASHRC=%USERPROFILE%.bashrc

git-bash.bat

O artigo "Git portátil para Windows: Configurando o $HOME Variável de ambiente para permitir portabilidade completa (incluindo teclas SSL e configuração para uso com o GitHub)"Adicione também informações úteis.

No entanto, se você instalar o GIT em uma unidade portátil, desejará que suas configurações viajem com a instalação - o que obviamente não o fará se estiver procurando por elas em uma pasta que possa não existir em outros computadores.

Portanto, o que precisamos fazer é dizer ao portátil Git para tratar um local específico em sua própria pasta como pasta doméstica; Dessa forma, podemos copiar a pasta Git inteira em qualquer lugar que gostar e as configurações viajarão com ela.

Outras dicas

Configurando o diretor da casa

A solução com um git-bash-portable.bat O wrapper abre outra janela do Windows CMD para mim que permanece em segundo plano.

Outra solução mais nativa é ajustar /etc/profile e defina a casa Var lá. Basta adicionar as seguintes linhas ao final de /etc/profile, myuser ser seu virtual nome de usuário:

# end of /etc/profile
export HOME="/home/myuser"
cd

Isso define o diretório doméstico adequado e os CDs nele. Então o mecanismo de inicialização, como carregar todos os arquivos de /etc/profile.d Funciona corretamente e você apenas começa git-bash.exe com um DoubleClick.

Claro que você precisa criar seu diretório doméstico para que isso funcione. Comece o Git-Bash e crie-o:

mkdir -p /home/myuser

Iniciar ou reconectar -se ao agente

Em relação ao agente, ele geralmente deve ser recarregado com cada concha Git-Bash aberta. Uma solução para obter um agente independente que abrange todas as janelas Git-Bash é incluir o seguinte script ~/.mgssh na startup. Ele armazena o agente Env vars em um arquivo agent.env no .ssh diretório. Qualquer novo shell lê o arquivo, verifica se o agente ainda está em execução e se conecta a ele. Se não estiver funcionando, inicia o agente e reescreva o agent.env Arquivo. Certifique -se de que você .ssh Dir existe.

# cat ~/.mgssh

agentfile=~/.ssh/agent.env

agent_load_env()
{
  test -f "$agentfile" && . "$agentfile" >| /dev/null;
}

agent_start()
{
  (umask 077; ssh-agent >| "$agentfile")
  . "$agentfile" >| /dev/null;
}

agent_load_env

# agent_run_state: 0=agent running w/ key; 1=agent w/o key; 2= agent not running
agent_run_state=$(ssh-add -l >| /dev/null 2>&1; echo $?)

if [ ! "$SSH_AUTH_SOCK" ] || [ $agent_run_state = 2 ]; then
    agent_start
fi

# uncomment this, if you want to add a key on agent startup
#if [ "$SSH_AUTH_SOCK" ] && [ $agent_run_state = 1 ]; then
#    ssh-add
#fi

unset agentfile

Agora obtenha o .mgssh script em seu .bashrc:

# cat .bashrc
. ~/.mgssh

# ... more .bashrc content

Encontrei isso no Github:

https://help.github.com/articles/working-with-sh-key-sassphrases/#platformwindows

Matando o agente antes da remoção do bastão

Geralmente, antes de remover o seu USBSTICK, você pede ao Windows para ejetar O bastão, clicando com o botão direito do mouse no explorador ou usando o pequeno ícone de systray. Isso não funcionará, se seu agente ainda estiver em funcionamento. Certifique -se de matar o agente antes de fechar o último shell após a remoção do bastão:

$ ssh-agent -k

unset SSH_AUTH_SOCK;
unset SSH_AGENT_PID;
echo Agent pid 8472 killed;

Observação: geralmente você usaria eval $(ssh-agent -k) Para despertar o Env Vars também, mas como você faz isso antes de fechar a concha, é irrelevante. O script de inicialização acima .mgssh cuida da limpeza do ~/.ssh/agent.env Arquivo para que isso também não precise ser feito.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top