Исправьте местоположение msysGit Portable $ HOME - PullRequest
20 голосов
/ 11 августа 2010

Я успешно установил и настроил msysGit Portable на мою флешку и использовал ее для извлечения и установки репозиториев GitHub. Тем не менее, мне кажется, что мне всегда нужно поддерживать SSH.

В частности, чтобы SSH мог найти мои файлы ключей, я должен следовать этим инструкциям , чтобы запустить второй экземпляр ssh-agent, а затем ssh-add мой ключ каждый раз, когда я запускаю git-bash .bat.

Используя вывод ssh -v git@github.com для отладки, я вижу, что msysGit по умолчанию использует мой каталог пользователя Windows для поиска ключей. Это не может сделать это; Мне нужно, чтобы он посмотрел в своем собственном каталоге на переносном диске.

Как заставить $ HOME быть собственной папкой программы?

Обновление для неработающей ссылки Vox

Инструкции с этой страницы похожи на разорванную ссылку, которую я первоначально разместил. Цитируется ниже. Также вот веб-архив оригинальной статьи Vox .

Однако, если вы попробуете это и получите:

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

тогда ваш сеанс не работает под ssh-agent. Вы можете обойти это, перезапустив новую оболочку под агентом, выполнив:

exec ssh-agent bash 

где вы можете заменить bash на оболочку по вашему выбору. Как только вы это сделаете, вы сможете запустить ssh-add, чтобы загрузить ключ для этой оболочки.

Ответы [ 2 ]

17 голосов
/ 11 августа 2010

Команда, используемая для запуска git bash:

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

Я только что попробовал следующее в сеансе 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

По умолчанию $ HOME $% HOMEPATH%,но если я принудительно заставлю% HOME%:

set HOME=/another/path

и затем запусту тот же сеанс 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

Так что, если вы оберните вызов bash сценарием, установив HOME в:

  • %~dp0: путь оболочки на вашем USB-ключе
  • или %~d1\your\path: с %~d1 - буква диска (вашего USB-ключа, если ваша оболочка включенаit)

, вы должны иметь возможность принудительно установить HOME на любое значение, которое вам нужно.


Примечание (ноябрь 2011 г.): с тех пор OP dgw написал свою собственную оболочку :

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

Статья " Portable Git для Windows: настройка среды $HOMEпеременная для обеспечения полной переносимости (включая ключи SSL и конфигурацию для использования с GitHub)"также добавляет полезную информацию.

Однако, если вы устанавливаете Git на переноснойКонечно, вы захотите, чтобы ваши настройки перемещались вместе с установкой, чего, очевидно, не будет, если он ищет их в папке, которая может отсутствовать на других компьютерах.

Итак, что нам нужно сделать?это сказать Portable Git, чтобы он рассматривал определенное место в своей собственной папке как домашнюю папку;таким образом, мы можем скопировать всю папку Git куда угодно и настройки будут перемещаться вместе с ней.

1 голос
/ 10 апреля 2018

Установка домашнего каталога

Решение с оболочкой git-bash-portable.bat открывает для меня еще одно окно Windows CMD, которое остается в фоновом режиме.

Другое, более родное решение - настроить /etc/profile и установите там HOME var.Просто добавьте следующие строки в конец /etc/profile, myuser beeing ваше виртуальное имя пользователя:

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

Это устанавливает правильный каталог HOME и компакт-диски в него.Тогда механизм запуска, такой как загрузка всех файлов из /etc/profile.d, работает правильно, и вы просто запускаете git-bash.exe двойным щелчком мыши.

Конечно, вы должны создать свой домашний каталог, чтобы это работало.Запустите git-bash и создайте его:

mkdir -p /home/myuser

Запуск или повторное подключение к агенту

Что касается агента, его обычно нужно перезагружать при каждой открытой оболочке git-bash.Решение получить независимого агента, охватывающего все окна git-bash, состоит в том, чтобы включить в запуск следующий небольшой скрипт ~/.mgssh.Он хранит данные агента в файле agent.env в каталоге .ssh.Любая новая оболочка читает файл, проверяет, все ли еще работает агент, и подключается к нему.Если он не запущен, он запускает агент и перезаписывает файл agent.env.Убедитесь, что ваш .ssh dir существует.

# 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

Теперь поставьте скрипт .mgssh в ваш .bashrc:

# cat .bashrc
. ~/.mgssh

# ... more .bashrc content

Нашел это на GitHub:

https://help.github.com/articles/working-with-ssh-key-passphrases/#platform-windows

Убийство агента перед удалением флешки

Обычно, перед тем как убрать ваш usbstick, вы просите Windows извлечь флешку, щелкнув ее правой кнопкой в ​​проводнике.или используя маленькую иконку систрей.Это не будет работать, если ваш агент все еще работает.Обязательно убивайте агента перед закрытием последней оболочки при удалении флешки:

$ ssh-agent -k

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

Примечание: Обычно вы бы также использовали eval $(ssh-agent -k) для сброса переменных env, но, как вы делаете это непосредственно перед закрытиемОболочка это не имеет значения.Приведенный выше стартовый скрипт .mgssh позаботится о том, чтобы очистить файл ~/.ssh/agent.env, так что это не нужно делать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...