Fix msysgit $ Portable accesso Localita
-
27-09-2019 - |
Domanda
Ho installato con successo e configurato msysgit portatile sul mio flash drive, e lo hanno utilizzato per tirare e spingere pronti contro termine GitHub. Tuttavia, mi sembra di avere sempre a kludge il supporto SSH.
In particolare, al fine di SSH per trovare i miei file di chiave, devo seguire queste istruzioni per avviare una seconda istanza di ssh-agent
e poi ssh-add
mia chiave ogni volta che corro git-bash.bat.
Utilizzando l'output di ssh -v git@github.com
eseguire il debug vedo che msysgit default è la mia directory utente di Windows per cercare le chiavi. Non può farlo; Ho bisogno di guardare nella propria directory sul disco rigido portatile.
Come posso forzare $ HOME per essere propria cartella del programma?
Aggiornamento per collegamento Vox rotto
Le istruzioni da questa pagina simili al Ora- link interrotto originariamente ho postato. Citato in basso. qui è anche la WebArchive dell'originale Vox articolo .
Tuttavia, se si tenta di questa e ottenere:
% ssh-add Could not open a connection to your authentication agent.
quindi la sessione non è in esecuzione con l'ssh-agent. È possibile aggirare il problema riavviando una nuova shell sotto l'agente eseguendo:
exec ssh-agent bash
dove è possibile sostituire bash con il guscio di vostra scelta. Una volta fatto questo, si dovrebbe essere in grado di eseguire ssh-add per caricare la chiave per quel guscio.
Soluzione
Il comando usato per lanciare bash Git è:
C:\Windows\SysWOW64\cmd.exe /c ""C:\Prog\Git\1.7.1\bin\sh.exe" --login -i"
Ho appena provato quanto segue in una sessione 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
Per impostazione predefinita, $ HOME $% HOMEPATH%, ma se la forza% HOME%:
set HOME=/another/path
e poi lanciare la stessa sessione 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
Quindi, se si avvolge la chiamata da uno script bash impostando HOME per:
-
%~dp0
: il percorso della involucro sulla vostra chiave USB - o
%~d1\your\path
: con%~d1
essendo la lettera di unità (della vostra chiave USB Se il wrapper è su di esso)
, si dovrebbe essere in grado di forza HOME per qualsiasi valore è necessario.
Nota (novembre 2011): da allora, l'OP dgw ha scritto il suo proprio involucro :
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
L'articolo " portatile Git per Windows: l'impostazione del $HOME
variabile d'ambiente per consentire la portabilità completa (comprese le chiavi SSL e la configurazione per l'utilizzo con GitHub) " anche aggiungere informazioni utili.
Tuttavia, se si installa Git in un'unità portatile, ti consigliamo le impostazioni di viaggiare con l'installazione, che ovviamente saranno non se è alla ricerca di loro in una cartella che non può esistere su altri computer.
Quindi, quello che dobbiamo fare è dire Portable Git per il trattamento di una posizione specifica all'interno della propria cartella come cartella home; in questo modo siamo in grado di copiare l'intera cartella Git ovunque ci piace e le impostazioni viaggeremo con esso.
Altri suggerimenti
Impostazione della directory home
La soluzione con un wrapper git-bash-portable.bat
apre un'altra finestra di Windows CMD per me che rimane in background.
Un altro, la soluzione più originario è quello di regolare /etc/profile
e impostare la Home Var lì. Basta aggiungere le seguenti righe alla fine del /etc/profile
, myuser
beeing il tuo virtual nome utente:
# end of /etc/profile
export HOME="/home/myuser"
cd
Questo imposta la corretta directory HOME e cd in esso. Poi il meccanismo di avviamento, come il caricamento di tutti i file da /etc/profile.d
funziona correttamente e si può lanciare git-bash.exe
con un doppio clic.
Naturalmente è necessario creare la directory home per questo al lavoro. Inizio git-bash e crearlo:
mkdir -p /home/myuser
Avvio o ricollegare all'agente
Per quanto riguarda l'agente, essa deve normalmente essere ricaricato con ogni shell git-bash aperto. Una soluzione per ottenere un agente indipendente che abbracciano tutte le finestre git-bash è quello di includere il seguente piccolo ~/.mgssh
script nella startup. Memorizza l'agente env vars in un agent.env
file nella directory .ssh
. Qualsiasi nuova shell legge il file, controlla se l'agente è ancora in corso e si collega ad esso. Se non è in esecuzione si avvia l'agente e riscrive il file agent.env
. Assicurati che il tuo dir .ssh
esiste.
# 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
Ora di risalire allo script .mgssh
nel .bashrc
:
# cat .bashrc
. ~/.mgssh
# ... more .bashrc content
Ho trovato questo su GitHub:
https: //help.github. com / articoli / lavoro-con-ssh-passphrase-chiave / # piattaforma-finestre
Uccidere l'agente prima della rimozione del bastone
Di solito, prima di rimuovere il tuo usbstick si chiede di Windows per di espulsione il bastone, facendo clic destro nel Explorer o utilizzando la piccola icona systray. Questo non funziona, se il vostro agente è ancora attivo e funzionante. Assicurati di uccidere l'agente prima di chiudere l'ultima shell al momento della rimozione bastone:
$ ssh-agent -k
unset SSH_AUTH_SOCK;
unset SSH_AGENT_PID;
echo Agent pid 8472 killed;
Nota: Di solito si usa eval $(ssh-agent -k)
per disinserire l'env vars pure, ma come si fa questo appena prima di chiudere la shell è irrilevante. Quanto sopra script di avvio .mgssh
si occupa di ripulire il file ~/.ssh/agent.env
in modo che non deve essere fatto sia.