Измените расположение каталога ~ в установке Windows Git Bash
Я даже не уверен, что задаю правильный вопрос. Позвольте мне объяснить мою ситуацию:
речь идет о Git на Windows 7.
моя компания устанавливает каталог пользователей Windows на сетевом диске, а не на локальном жестком диске (для резервного копирования и других целей, выходящих за рамки этого вопроса). Я не могу изменить эту политику.
однако я могу иметь локальные файлы за пределами этой схемы, и именно так настроен мой сервер Apache. Только на местном уровне.
I установлен Git. Он устанавливает Баш. Когда я запускаю Баш и cd ~
(переход в корневой каталог) я нахожу, что он (корень Bash) указывает на мой сетевой каталог пользователя. Я хочу, чтобы он этого не делал. Я хочу!--2--> чтобы быть в другом месте на жестком диске. Я хочу, чтобы при выполнении других операций, таких как установка сертификата, ключа SSH и т. д. его значения по умолчанию не будут автоматически использовать этот сетевой каталог.
Я тщетно искал везде, и все, что я могу найти, относится к ответам это включает в себя псевдонимы, перенаправление и местоположение $ HOME указывает. Но это совсем не то, чего я хочу.
вопрос: Могу ли я изменить этот каталог? И если да, то как?
обновление: Итак, $HOME - это то, что мне нужно изменить. Однако я не смог найти, где установлена эта мифическая переменная $HOME, поэтому я предположил, что это версия системы Linux PATH или что-то в этом роде. в любом случае...
у меня есть файл "профиль" под git/etc
. Здесь содержание (заметьте, не долларов):
# 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 ()
{
(( & 0x0002 )) && echo -n "binary" || echo -n "text"
(( & 0x0010 )) && echo -n ",exec"
(( & 0x0040 )) && echo -n ",cygexec"
(( & 0x0100 )) && echo -n ",notexec"
}
# Shell dependent settings
profile_d ()
{
local file=
for file in $(export LC_COLLATE=C; echo /etc/profile.d/*.); 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/*.); 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 '3]0;${PWD}n3[32m${USER}@${HOSTNAME} 3[33m${PWD/${HOME}/~}3[0mn$ ')
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
7 ответов:
я не понимаю, почему вы не хотите установить
$HOME
переменная окружения так, что решает именно то, что вы просите.
cd ~
не значит перейти в корневой каталог, а перейдите в домашний каталог пользователя, который расположен по$HOME
переменные среды.я только что протестировал его, и он работает для меня:
открыть
C:\Program Files (x86)\Git\etc\profile
и set$HOME
переменной, что вы хотите (добавить его, если это не там.) Хорошее место может быть, например, сразу после условия, прокомментированного# Set up USER's home directory
. Положите туда что-то вроде этого:HOME=/c/my/custom/home
сохраните его, откройте git-bash и выполните
cd ~
. Вы должны быть в директории/c/my/custom/home
сейчас.все, что обращается к профилю пользователя, должно входить в этот каталог вместо профиля Windows на сетевом диске.
Примечание:
C:\Program Files (x86)\Git\etc\profile
общий для всех пользователей, так что если машина используется более пользователи, это хорошая идея, чтобы установить$HOME
динамически:HOME=/c/Users/$USERNAME
Я вижу, что на этот вопрос уже дан ответ, но я нахожусь в аналогичной ситуации, и я подумал, что поделюсь тем, что я сделал. Первоначально я сделал это не для Git, а для MSYS/MinGW.
The
HOME
переменная окружения обычно не задается для приложений Windows, поэтому ее создание через Windows не повлияло ни на что, что я не хотел затрагивать. Из свойств компьютера (щелкните правой кнопкой мыши на компьютере - или как он называется-в Проводнике и выберите Свойства или панель управления - > Система и безопасность -> Система), выберитеAdvanced system settings
, потомEvironment Variables...
и создать новый,HOME
, и назначить его там, где вам нравится.если вы не можете создать новые переменные среды, другой ответ будет по-прежнему работать. (Я подробно рассказал о том, как создавать переменные среды именно потому, что их так трудно найти.)
вместо изменения глобального
profile
вы можете создать.bash_profile
по умолчанию (например,C:\Users\WhateverUser\.bash_profile
) следующего содержания:export HOME="C:\my\projects\dir" cd "$HOME" # if you'd like it to be the starting dir of the git shell
в моем случае все, что мне нужно было сделать, это добавить следующее переменные пользователя на Windows:
имя переменной:
HOME
Значение переменной:%USERPROFILE%
Как установить переменную окружения (вы можете использовать пользовательские переменные для имени пользователя если вы не являетесь системным администратором)
1.Щелкните правой кнопкой мыши на ярлыке Gitbash выберите Свойства
2.Выберите вкладку "Ярлык"
3.Введите начальный каталог в поле" начать в"
4.Удалить часть" --cd-to-home "из поля" Target"
Итак, $HOME - это то, что мне нужно изменить. Однако я не смог найти, где установлена эта мифическая переменная $HOME, поэтому я предположил, что это версия системы Linux PATH или что-то в этом роде. в любом случае...**
ответ
добавление домой в верхней части работали.
HOME="c://path/to/custom/root/"
.#THE FIX WAS ADDING THE FOLLOWING LINE TO THE TOP OF THE PROFILE FILE HOME="c://path/to/custom/root/" # below are the original contents =========== # To the extent possible under law, ..blah blah # 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 () { (( & 0x0002 )) && echo -n "binary" || echo -n "text" (( & 0x0010 )) && echo -n ",exec" (( & 0x0040 )) && echo -n ",cygexec" (( & 0x0100 )) && echo -n ",notexec" } # Shell dependent settings profile_d () { local file= for file in $(export LC_COLLATE=C; echo /etc/profile.d/*.); 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/*.); 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 '3]0;${PWD}\n3[32m${USER}@${HOSTNAME} 3[33m${PWD/${HOME}/~}3[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
вот вы идете: Вот так!: Создайте точку восстановления системы. Войдите под учетной записью администратора. Удаление папки C:\SomeUser. Переместить папку c:\Users\SomeUser так что это становится c:\SomeUser. Откройте редактор реестра. Перейдите в раздел HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList. Ищите "ProfileImagePath", пока не найдете тот, который указывает на c:\Users\SomeUser. Измените его так, чтобы он указывал на c:\SomeUser. Используйте Восстановление системы в случае, если что-то пойдет не так.