2012-08-11 13 views
13

To co zrobiłem:Mój plik .bashrc nie stracony na starcie Git Bash (Windows 7)

cd ~ 
touch .bashrc 
notepad .bashrc 

a zawartość jest moim .bashrc (znalezione w internecie gdzieś):

SSH_ENV="$HOME/.ssh/environment" 

# start the ssh-agent 
function start_agent { 
    echo "Initializing new SSH agent..." 
    # spawn ssh-agent 
    ssh-agent | sed 's/^echo/#echo/' > "$SSH_ENV" 
    echo succeeded 
    chmod 600 "$SSH_ENV" 
    . "$SSH_ENV" > /dev/null 
    ssh-add 
} 

# test for identities 
function test_identities { 
    # test whether standard identities have been added to the agent already 
    ssh-add -l | grep "The agent has no identities" > /dev/null 
    if [ $? -eq 0 ]; then 
     ssh-add 
     # $SSH_AUTH_SOCK broken so we start a new proper agent 
     if [ $? -eq 2 ];then 
      start_agent 
     fi 
    fi 
} 

# check for running ssh-agent with proper $SSH_AGENT_PID 
if [ -n "$SSH_AGENT_PID" ]; then 
    ps -ef | grep "$SSH_AGENT_PID" | grep ssh-agent > /dev/null 
    if [ $? -eq 0 ]; then 
    test_identities 
    fi 
# if $SSH_AGENT_PID is not properly set, we might be able to load one from 
# $SSH_ENV 
else 
    if [ -f "$SSH_ENV" ]; then 
    . "$SSH_ENV" > /dev/null 
    fi 
    ps -ef | grep "$SSH_AGENT_PID" | grep -v grep | grep ssh-agent > /dev/null 
    if [ $? -eq 0 ]; then 
     test_identities 
    else 
     start_agent 
    fi 
fi 

W jakiś sposób ten skrypt nie jest w ogóle wykonywany. Nie widzę żadnych ciągów, które powinny zostać powtórzone. Jestem zaznajomiony z linią poleceń systemu Unix w systemach Linux i Mac OS X, ale nie mam pojęcia, jak to działa w systemie Windows. Wszelkie sugestie proszę?

EDYCJA: Okay, mój błąd ... ten scenariusz jest wykonywany, ale nie do końca rozumiem, co robi. Miałem nadzieję, że nie będę proszony o podanie hasła za każdym razem, gdy będę naciskać na zdalne repo. W obecnej formie wciąż jestem pytany za każdym razem.

+0

Ten '.bashrc' jest całkowicie uniksowy. Co próbujesz osiągnąć, mając go w swoim git-bash? – favoretti

+0

Powiedziałem o tym moim uzasadnieniu na końcu mojego pytania po tym, jak zredagowałem moje pytanie. Jak mogę to osiągnąć? Nie mam pełnego zrozumienia, jak działa SSH. – codedog

Odpowiedz

21

Bingo! Coś było oczywiście nie tak ze sposobem, w jaki ssh-agent jest uruchamiany w tym .bashrc. Skopiowałem ten z here i działa to naprawdę dobrze! Teraz muszę tylko wprowadzić moje hasło, gdy uruchomi się brzęczyk git, a każde kolejne naciśnięcie już go nie potrzebuje.

Oto rzeczywista zawartość skryptu teraz:

SSH_ENV=$HOME/.ssh/environment 

function start_agent { 
    echo "Initialising new SSH agent..." 
    /usr/bin/ssh-agent | sed 's/^echo/#echo/' > ${SSH_ENV} 
    echo succeeded 
    chmod 600 ${SSH_ENV} 
    . ${SSH_ENV} > /dev/null 
    /usr/bin/ssh-add; 
} 

# Source SSH settings, if applicable 

if [ -f "${SSH_ENV}" ]; then 
    . ${SSH_ENV} > /dev/null 
    #ps ${SSH_AGENT_PID} doesn't work under cywgin 
    ps -ef | grep ${SSH_AGENT_PID} | grep ssh-agent$ > /dev/null || { 
     start_agent; 
    } 
else 
    start_agent; 
fi 
+1

Teraz, gdy mam to do roboty, znalazłem najlepsze rozwiązanie dla linii poleceń: Powershell + Console2 + Posh-git! – codedog

+0

To działa! Dziękuję Ci bardzo. :) – wooncherk

+0

+1 TY ... [Przykład GitHub] (https://help.github.com/articles/working-with-ssh-key-passphrases) nie działał dla mnie albo :: ten zrobił –

0

Spróbuj tego, pracuje dla mnie.

SSH_ENV=$HOME/.ssh/environment 

function start_agent { 
    echo "Initialising new SSH agent..." 
    /usr/bin/ssh-agent | sed 's/^echo/#echo/' > ${SSH_ENV} 
    echo succeeded 
    chmod 600 ${SSH_ENV} 
    . ${SSH_ENV} > /dev/null 
    /usr/bin/ssh-add; 
} 

# Source SSH settings, if applicable 

if [ -f "${SSH_ENV}" ]; then 
    . ${SSH_ENV} > /dev/null 
    #ps ${SSH_AGENT_PID} doesn't work under cywgin 
    ps -ef | grep ${SSH_AGENT_PID} | grep ssh-agent$ > /dev/null || { 
     start_agent; 
    } 
else 
    start_agent; 
fi 
8

Najprostszy mechanizm Windows jest jednym z tutaj http://anterence.blogspot.co.uk/2012/01/ssh-agent-in-msysgit.html

Modified by pokazać najważniejsze nazwiska inne niż 'id_rsa', plik .bashrc wygląda następująco:

#! /bin/bash 
eval `ssh-agent -s` 
ssh-add ~/.ssh/github_rsa 
ssh-add ~/.ssh/otherkey_rsa 

Jesteś monit o podanie hasła dla każdego klawisza po kolei, ale tylko po raz pierwszy po uruchomieniu komputera.

+1

Dziękuję! To działało dla mnie, żadna z pozostałych nie była całkiem łatwa do zrozumienia – Dermot

+0

Świetnie. Jedyną lekką wadą jaką widziałem jest to, że możesz mieć jednego ssh -agent procesu na bash okna git. –

Powiązane problemy