Я даже не уверен, что задаю правильный вопрос. Позвольте мне объяснить мою ситуацию:
Это о Git на Windows 7.
Моя компания устанавливает каталог пользователей Windows на сетевом диске, а не на локальном жестком диске (для резервного копирования и других целей, выходящих за рамки этого вопроса). Я не могу изменить эту политику.
Однако я МОГУ иметь локальные файлы вне этой схемы, и именно так настроен мой сервер Apache. Полностью местный.
Я установил Git. Устанавливает Bash. Когда я запускаю Bash и cd ~
(переключаюсь на корневой каталог), я обнаруживаю, что он (корневой каталог Bash) указывает на мой сетевой пользовательский каталог. Я хочу этого не делать. Я хочу ~
быть в другом месте на моем жестком диске. Я хочу, чтобы при выполнении других операций, таких как установка сертификата, ключа SSH и т. Д., Его настройки по умолчанию не использовали этот сетевой каталог автоматически.
Я всюду тщетно искал, и все, что я могу найти, - это ответы, которые включают псевдонимы, перенаправление и местоположение, на которое указывает $ HOME. Но это совсем не то, что я хочу.
Вопрос в том, могу ли я изменить этот каталог? И если так: как?
ОБНОВЛЕНИЕ: Итак, $ HOME - это то, что мне нужно изменить. Однако мне не удалось найти, где установлена эта мифическая переменная $ HOME, поэтому я предположил, что это была системная версия PATH для Linux или что-то в этом роде. Во всяком случае ...
У меня есть файл профиля под git/etc
. Вот содержимое (уведомление не $ HOME):
# To the extent possible under law, the author(s) have dedicated all
# copyright and related and neighboring rights to this software to the
# public domain worldwide. This software is distributed without any warranty.
# You should have received a copy of the CC0 Public Domain Dedication along
# with this software.
# If not, see <http://creativecommons.org/publicdomain/zero/1.0/>.
# System-wide profile file
# Some resources...
# Customizing Your Shell: http://www.dsl.org/cookbook/cookbook_5.html#SEC69
# Consistent BackSpace and Delete Configuration:
# http://www.ibb.net/~anne/keyboard.html
# The Linux Documentation Project: http://www.tldp.org/
# The Linux Cookbook: http://www.tldp.org/LDP/linuxcookbook/html/
# Greg's Wiki http://mywiki.wooledge.org/
# Setup some default paths. Note that this order will allow user installed
# software to override 'system' software.
# Modifying these default path settings can be done in different ways.
# To learn more about startup files, refer to your shell's man page.
MSYS2_PATH="/usr/local/bin:/usr/bin:/bin"
MANPATH="/usr/local/man:/usr/share/man:/usr/man:/share/man:${MANPATH}"
INFOPATH="/usr/local/info:/usr/share/info:/usr/info:/share/info:${INFOPATH}"
MINGW_MOUNT_POINT=
if [ -n "$MSYSTEM" ]
then
case "$MSYSTEM" in
MINGW32)
MINGW_MOUNT_POINT=/mingw32
PATH="${MINGW_MOUNT_POINT}/bin:${MSYS2_PATH}:${PATH}"
PKG_CONFIG_PATH="${MINGW_MOUNT_POINT}/lib/pkgconfig:${MINGW_MOUNT_POINT}/share/pkgconfig"
ACLOCAL_PATH="${MINGW_MOUNT_POINT}/share/aclocal:/usr/share/aclocal"
MANPATH="${MINGW_MOUNT_POINT}/share/man:${MANPATH}"
;;
MINGW64)
MINGW_MOUNT_POINT=/mingw64
PATH="${MINGW_MOUNT_POINT}/bin:${MSYS2_PATH}:${PATH}"
PKG_CONFIG_PATH="${MINGW_MOUNT_POINT}/lib/pkgconfig:${MINGW_MOUNT_POINT}/share/pkgconfig"
ACLOCAL_PATH="${MINGW_MOUNT_POINT}/share/aclocal:/usr/share/aclocal"
MANPATH="${MINGW_MOUNT_POINT}/share/man:${MANPATH}"
;;
MSYS)
PATH="${MSYS2_PATH}:/opt/bin:${PATH}"
PKG_CONFIG_PATH="/usr/lib/pkgconfig:/usr/share/pkgconfig:/lib/pkgconfig"
;;
*)
PATH="${MSYS2_PATH}:${PATH}"
;;
esac
else
PATH="${MSYS2_PATH}:${PATH}"
fi
MAYBE_FIRST_START=false
SYSCONFDIR="${SYSCONFDIR:=/etc}"
# TMP and TEMP as defined in the Windows environment must be kept
# for windows apps, even if started from msys2. However, leaving
# them set to the default Windows temporary directory or unset
# can have unexpected consequences for msys2 apps, so we define
# our own to match GNU/Linux behaviour.
ORIGINAL_TMP=$TMP
ORIGINAL_TEMP=$TEMP
#unset TMP TEMP
#tmp=$(cygpath -w "$ORIGINAL_TMP" 2> /dev/null)
#temp=$(cygpath -w "$ORIGINAL_TEMP" 2> /dev/null)
#TMP="/tmp"
#TEMP="/tmp"
case "$TMP" in *\\*) TMP="$(cygpath -m "$TMP")";; esac
case "$TEMP" in *\\*) TEMP="$(cygpath -m "$TEMP")";; esac
test -d "$TMPDIR" || test ! -d "$TMP" || {
TMPDIR="$TMP"
export TMPDIR
}
# Define default printer
p='/proc/registry/HKEY_CURRENT_USER/Software/Microsoft/Windows NT/CurrentVersion/Windows/Device'
if [ -e "${p}" ] ; then
read -r PRINTER < "${p}"
PRINTER=${PRINTER%%,*}
fi
unset p
print_flags ()
{
(( $1 & 0x0002 )) && echo -n "binary" || echo -n "text"
(( $1 & 0x0010 )) && echo -n ",exec"
(( $1 & 0x0040 )) && echo -n ",cygexec"
(( $1 & 0x0100 )) && echo -n ",notexec"
}
# Shell dependent settings
profile_d ()
{
local file=
for file in $(export LC_COLLATE=C; echo /etc/profile.d/*.$1); do
[ -e "${file}" ] && . "${file}"
done
if [ -n ${MINGW_MOUNT_POINT} ]; then
for file in $(export LC_COLLATE=C; echo ${MINGW_MOUNT_POINT}/etc/profile.d/*.$1); do
[ -e "${file}" ] && . "${file}"
done
fi
}
for postinst in $(export LC_COLLATE=C; echo /etc/post-install/*.post); do
[ -e "${postinst}" ] && . "${postinst}"
done
if [ ! "x${BASH_VERSION}" = "x" ]; then
HOSTNAME="$(/usr/bin/hostname)"
profile_d sh
[ -f "/etc/bash.bashrc" ] && . "/etc/bash.bashrc"
elif [ ! "x${KSH_VERSION}" = "x" ]; then
typeset -l HOSTNAME="$(/usr/bin/hostname)"
profile_d sh
PS1=$(print '\033]0;${PWD}\n\033[32m${USER}@${HOSTNAME} \033[33m${PWD/${HOME}/~}\033[0m\n$ ')
elif [ ! "x${ZSH_VERSION}" = "x" ]; then
HOSTNAME="$(/usr/bin/hostname)"
profile_d zsh
PS1='(%n@%m)[%h] %~ %% '
elif [ ! "x${POSH_VERSION}" = "x" ]; then
HOSTNAME="$(/usr/bin/hostname)"
PS1="$ "
else
HOSTNAME="$(/usr/bin/hostname)"
profile_d sh
PS1="$ "
fi
if [ -n "$ACLOCAL_PATH" ]
then
export ACLOCAL_PATH
fi
export PATH MANPATH INFOPATH PKG_CONFIG_PATH USER TMP TEMP PRINTER HOSTNAME PS1 SHELL tmp temp
test -n "$TERM" || export TERM=xterm-256color
if [ "$MAYBE_FIRST_START" = "true" ]; then
sh /usr/bin/regen-info.sh
if [ -f "/usr/bin/update-ca-trust" ]
then
sh /usr/bin/update-ca-trust
fi
clear
echo
echo
echo "###################################################################"
echo "# #"
echo "# #"
echo "# C A U T I O N #"
echo "# #"
echo "# This is first start of MSYS2. #"
echo "# You MUST restart shell to apply necessary actions. #"
echo "# #"
echo "# #"
echo "###################################################################"
echo
echo
fi
unset MAYBE_FIRST_START
~
представляет ваш домашний каталог. ИзменениеHOME
переменной среды изменит ее направление.HOME
переменная окружения меняется не только там, куда~
указывает, но и во все, что обращается к домашнему каталогу пользователя.~
это просто сокращение для «домашнего каталога пользователя», поэтому, где бы ни~
указывалось, есть домашний каталог пользователя.Ответы:
Я не понимаю, почему вы не хотите устанавливать
$HOME
переменную окружения, поскольку это решает именно то, что вы просите.cd ~
не означает изменение корневого каталога , но изменение домашнего каталога пользователя , который устанавливается$HOME
переменной окружения.Быстрое и грязное решение
Отредактируйте
C:\Program Files (x86)\Git\etc\profile
и установите$HOME
переменную на что хотите (добавьте ее, если ее там нет). Хорошее место может быть, например, сразу после условия, указанного в# Set up USER's home directory
. Он должен быть в формате MinGW, например:Сохраните его, откройте Git Bash и выполните
cd ~
. Вы должны быть в каталоге/c/my/custom/home
сейчас.Все, что обращается к профилю пользователя, должно идти в этот каталог вместо вашего профиля Windows на сетевом диске.
Примечание:
C:\Program Files (x86)\Git\etc\profile
доступно всем пользователям, поэтому, если машина используется несколькими пользователями, рекомендуется установить$HOME
динамически:Чистое решение
Установите переменную среды
HOME
в Windows в любой каталог, который вы хотите. В этом случае вы должны установить его в формате пути Windows (напримерc:\my\custom\home
, с обратной косой чертой ), Git Bash загрузит его и преобразует в его формат.Если вы хотите изменить домашний каталог для всех пользователей на вашем компьютере , установите его как системную переменную среды , где вы можете использовать, например,
%USERNAME%
переменную, чтобы у каждого пользователя был свой собственный домашний каталог, например:Если вы хотите изменить домашний каталог только для себя , установите его как переменную среды пользователя , чтобы другие пользователи не пострадали. В этом случае вы можете просто жестко закодировать весь путь:
источник
profile
? Просто к сведению , что содержаниеHOME
переменной должно выглядеть в GIT-Баш:/c/some/path
.HOME="c://path/to/custom/root/"
В моем случае все, что мне нужно было сделать, это добавить следующую переменную User в Windows:
Имя
HOME
переменной: значение переменной:
%USERPROFILE%
Как установить переменную среды (Вы можете использовать переменные пользователя для раздела имени пользователя, если вы не являетесь системным администратором)
источник
HOME=/c/Users/$USERNAME
в профиль.Я бы поделился тем, что сделал, и это работает не только для Git, но и для MSYS / MinGW.
HOME
Переменная окружения обычно не устанавливается для приложений Windows, создавая таким образом через Windows , больше ничего не влияет. В окне «Свойства компьютера» (щелкните правой кнопкой мыши «Компьютер» - или как его там называют) в «Проводнике» и выберите «Свойства» или «Панель управления -> Система и безопасность -> Система»), выберитеAdvanced system settings
, затемEnvironment Variables...
создайте новыйHOME
и назначьте его. где угодноЕсли вы не можете создать новые переменные среды, другой ответ все равно будет работать. (Я подробно рассказал о том, как создавать переменные среды, потому что это так трудно найти.)
источник
rundll32 sysdm.cpl,EditEnvironmentVariables
, из командной строки или ввестиenvironment
в меню Пуск, чтобы запустить ту же команду.%USERPROFILE%
является хорошим значением для вашей переменной среды HOME . Смотрите мой ответHOME
(~
) был ближе к корневому/
дереву. Я на самом деле создал каталогC:/home
и использую его. Кроме того, кстати, ОП отметил, что для него он%USERPROFILE%
находится на сетевом диске и ужасно болезнен в использовании, как вы описали.Вместо того, чтобы модифицировать глобальный,
profile
вы можете создать.bash_profile
в вашем$HOME
каталоге по умолчанию (напримерC:\Users\WhateverUser\.bash_profile
) следующее содержимое:источник
.bash_profile
это правильный способ настройки вашей среды, взлом.profile
не является хорошей практикой.~/.profile
это нормально. Фактически, документы предпочитают это~/.bash_profie
: «Подходящие файлы для переменных среды, которые влияют только на конкретного пользователя (а не на систему в целом), являются ... ~ / .profile». И: «Конфигурационные файлы оболочки, такие как ... ~ / .bash_profile ..., часто рекомендуются для установки переменных среды. Хотя это может работать в оболочках Bash для программ, запускаемых из оболочки, переменные, установленные в этих файлах, по умолчанию недоступны чтобы программы запускались из графической среды в сеансе рабочего стола. " help.ubuntu.com/community/EnvironmentVariables1. Щелкните правой кнопкой мыши на ярлыке Gitbash и выберите «Свойства».
2. Выберите вкладку «Ярлык».
3. Введите начальный каталог в поле «Пуск в поле
». 4. Удалите деталь «--cd-to-home» из поля «Цель».
источник
$HOME
переменнуюИтак, $ HOME - это то, что мне нужно изменить. Однако мне не удалось найти, где установлена эта мифическая переменная $ HOME, поэтому я предположил, что это была системная версия PATH для Linux или что-то в этом роде. Во всяком случае ... **
Ответ
Добавление HOME вверху
profile
файла сработало.HOME="c://path/to/custom/root/"
,источник
В Git 2.23 (Q3 2019) достаточно четко указано, как это
HOME
делается.См. Коммит e12a955 (04 июля 2019 г.) от Karsten Blees (
kblees
) .(Слиты Junio C Hamano -
gitster
- в фиксации fc613d2 , 19 июля 2019)Теперь mingw.c включает в себя следующий код:
источник
Я столкнулся с точно такой же проблемой. Мой домашний диск сопоставлен с сетевым диском. Также
Однако ниже работает из командной строки и я смог добавить
HOME
в переменные окружения.rundll32 sysdm.cpl,EditEnvironmentVariables
источник
Я знаю, что это старый вопрос, но это лучший результат Google для "окон gitbash homedir", поэтому я решил добавить свои выводы.
Независимо от того, что я пытался, я не мог заставить git-bash запускаться где-либо, кроме моего сетевого диска, (U :) в моем случае заставляя каждую операцию отвечать 15-20 секунд. (Удаленный сотрудник по VPN, сетевой диск размещен на другой стороне страны)
Я попытался установить переменные HOME и HOMEDIR в Windows.
Я попытался установить переменные HOME и HOMEDIR в файле git install'setc / profile.
Я попытался отредактировать «Start in» на ярлыке git-bash, чтобы он был C: / user / myusername.
Команда "env" внутри оболочки git-bash будет показывать правильный c: / user / myusername. Но git-bash все равно запускается в U:
Что в конечном итоге исправило это для меня, так это редактирование ярлыка git-bash и удаление «--cd-to-home» из строки «Цель».
Я на Windows 10 под управлением последней версии Git-for-windows 2.22.0.
источник
Вот, пожалуйста. Вот, пожалуйста. Создайте точку восстановления системы. Войдите под учетной записью администратора. Удалите папку C: \ SomeUser. Переместите папку c: \ Users \ SomeUser, чтобы она стала c: \ SomeUser. Откройте редактор реестра. Перейдите к HKLM \ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ \ Microsoft \ Windows NT \ CurrentVersion \ ProfileList. Ищите «ProfileImagePath», пока не найдете тот, который указывает на c: \ Users \ SomeUser. Измените его так, чтобы он указывал на c: \ SomeUser. Используйте Восстановление системы на случай, если что-то пойдет не так.
источник