Corrija o msysgit portátil $ Localização doméstica
-
27-09-2019 - |
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.
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.