Измените расположение каталога ~ в установке Windows Git Bash


138

Я даже не уверен, что задаю правильный вопрос. Позвольте мне объяснить мою ситуацию:

Это о 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, чтобы установить ее. Выше я добавил, как выглядит мой файл профиля.
PEWColina

Я вижу, у вас, вероятно, другая версия Git. Какая у вас версия? Кстати, попробуйте добавить настройки HOME в конец профиля. Но возможно, что это будет перезаписано где-то еще.
Дэвид Ференци Рогожан,

Ответы:


140

Я не понимаю, почему вы не хотите устанавливать $HOMEпеременную окружения, поскольку это решает именно то, что вы просите.

cd ~не означает изменение корневого каталога , но изменение домашнего каталога пользователя , который устанавливается $HOMEпеременной окружения.

Быстрое и грязное решение

Отредактируйте C:\Program Files (x86)\Git\etc\profileи установите $HOMEпеременную на что хотите (добавьте ее, если ее там нет). Хорошее место может быть, например, сразу после условия, указанного в # Set up USER's home directory. Он должен быть в формате MinGW, например:

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

Чистое решение

Установите переменную среды HOMEв Windows в любой каталог, который вы хотите. В этом случае вы должны установить его в формате пути Windows (например c:\my\custom\home, с обратной косой чертой ), Git Bash загрузит его и преобразует в его формат.

Если вы хотите изменить домашний каталог для всех пользователей на вашем компьютере , установите его как системную переменную среды , где вы можете использовать, например, %USERNAME%переменную, чтобы у каждого пользователя был свой собственный домашний каталог, например:

HOME=c:\custom\home\%USERNAME%

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

HOME=c:\my\custom\home

3
Спасибо, я не могу найти переменную $ HOME в моем профиле. Я добавил к вопросу. Взгляни, пожалуйста. может быть, мне нужно искать эту переменную в другом месте?
PEWColina

1
Никакой другой файл во всей директории не вызывает / устанавливает $ HOME.
PEWColina

1
Так ты пытался просто добавить это где-нибудь? Например в нижней части profile? Просто к сведению , что содержание HOMEпеременной должно выглядеть в GIT-Баш: /c/some/path.
Дэвид Ференци Рогожан,

6
добавление HOME вверху файла профиля сработало. HOME="c://path/to/custom/root/"
PEWColina

3
Добавление системной переменной среды «home» решило проблему, а не отредактировало файл профиля в папке git
firstpostcommenter

43

В моем случае все, что мне нужно было сделать, это добавить следующую переменную User в Windows:

Имя HOME
переменной: значение переменной:%USERPROFILE%

Как установить переменную среды (Вы можете использовать переменные пользователя для раздела имени пользователя, если вы не являетесь системным администратором)


3
Это отлично сработало для меня и является лучшим решением IMO для принятого ответа.
dan_g

2
Этот ответ должен идти наверх.
user4015990

1
Это работает, но не при использовании нескольких пользователей на одном компьютере. Я должен был пойти с добавлением HOME=/c/Users/$USERNAMEв профиль.
Гонзо

3
Это должен быть главный ответ. Это единственный способ (единственный способ найти), чтобы заставить GitBash использовать каталог .ssh в моей папке пользователя Windows (C: \ Users \ UserName). В моей системе по умолчанию было установлено значение% HOMEDRIVE% (M :). И, конечно, он все равно будет работать после обновления GitBash!
YanisTheYak

1
Это работает, если у вас нет установленной переменной $ HOME, но звучит так, как будто для OP установлено значение $ HOME, установленное политикой компании. У меня тоже есть его проблема. Этот ответ не работает в этом случае (новый параметр автоматически перезаписывается политикой компании).
bitmack

38

Я бы поделился тем, что сделал, и это работает не только для Git, но и для MSYS / MinGW.

HOMEПеременная окружения обычно не устанавливается для приложений Windows, создавая таким образом через Windows , больше ничего не влияет. В окне «Свойства компьютера» (щелкните правой кнопкой мыши «Компьютер» - или как его там называют) в «Проводнике» и выберите «Свойства» или «Панель управления -> Система и безопасность -> Система»), выберите Advanced system settings, затем Environment Variables...создайте новый HOMEи назначьте его. где угодно

Если вы не можете создать новые переменные среды, другой ответ все равно будет работать. (Я подробно рассказал о том, как создавать переменные среды, потому что это так трудно найти.)


4
Если у вас нет прав администратора для изменения среды с панели управления, вам нужно будет выполнить следующую команду rundll32 sysdm.cpl,EditEnvironmentVariables , из командной строки или ввести environmentв меню Пуск, чтобы запустить ту же команду.
Крис Чиассон

2
Это помогло мне установить домашний каталог для git-bash. Спасибо за подтверждение того, что можно установить переменную среды HOME в Windows, а также за подробные инструкции о том, как это сделать. Одно простое изменение для достижения моей цели.
Стивен Хоскинг

%USERPROFILE%является хорошим значением для вашей переменной среды HOME . Смотрите мой ответ
EliandroRibeiro

@EliandroRibeiro Это возможно, и в зависимости от ваших потребностей, может быть, хорошая идея. Для себя, я специально ничего не делать ithat образом. Частично для разделения Windows и Unix-подобных сред (чтобы избежать путаницы), а частично для того, чтобы my HOME( ~) был ближе к корневому /дереву. Я на самом деле создал каталог C:/homeи использую его. Кроме того, кстати, ОП отметил, что для него он %USERPROFILE%находится на сетевом диске и ужасно болезнен в использовании, как вы описали.
Менахем

1
Да, Менахем, я ценю, что вы были точны, но я хотел просто добиться деталей процесса, но подчеркнуть результат, что подтвердили многие люди, включая Стивена Хоскинга и меня. То есть, для меня конечный результат имеет значение, другие подробности больше отвлекают. Надеюсь, с тобой все в порядке.
xpt

21

Вместо того, чтобы модифицировать глобальный, profileвы можете создать .bash_profileв вашем $HOMEкаталоге по умолчанию (например 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

Да! .bash_profileэто правильный способ настройки вашей среды, взлом .profileне является хорошей практикой.
roblogic

1
@ropata "взлом" ~/.profileэто нормально. Фактически, документы предпочитают это ~/.bash_profie: «Подходящие файлы для переменных среды, которые влияют только на конкретного пользователя (а не на систему в целом), являются ... ~ / .profile». И: «Конфигурационные файлы оболочки, такие как ... ~ / .bash_profile ..., часто рекомендуются для установки переменных среды. Хотя это может работать в оболочках Bash для программ, запускаемых из оболочки, переменные, установленные в этих файлах, по умолчанию недоступны чтобы программы запускались из графической среды в сеансе рабочего стола. " help.ubuntu.com/community/EnvironmentVariables
Соколиный Глаз Паркер

7

1. Щелкните правой кнопкой мыши на ярлыке Gitbash и выберите «Свойства».
2. Выберите вкладку «Ярлык».
3. Введите начальный каталог в поле «Пуск в поле
». 4. Удалите деталь «--cd-to-home» из поля «Цель».


5
на самом деле не меняет $HOMEпеременную
roblogic

1
Какая версия винды? Кажется, невозможно получить доступ к свойствам в Windows 10.
Питер Мортенсен

@PeterMortensen щелкните правой кнопкой мыши Gitbash SHORTCUT и выберите Свойства
Özgür Öztürk

4

Итак, $ HOME - это то, что мне нужно изменить. Однако мне не удалось найти, где установлена ​​эта мифическая переменная $ HOME, поэтому я предположил, что это была системная версия PATH для Linux или что-то в этом роде. Во всяком случае ... **

Ответ

Добавление HOME вверху profileфайла сработало.

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 ()
  {
    (( $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

2

Итак, $HOMEэто то , что мне нужно изменить.

Однако мне не удалось найти, где установлена ​​эта мифическая $HOMEпеременная, поэтому я предположил, что это была версия PATH для системы Linux или что-то в этом роде.

В Git 2.23 (Q3 2019) достаточно четко указано, как это HOMEделается.

См. Коммит e12a955 (04 июля 2019 г.) от Karsten Blees ( kblees) .
(Слиты Junio C Hamano - gitster- в фиксации fc613d2 , 19 июля 2019)

mingw: инициализировать HOME при запуске

HOMEИсторически инициализация дублировалась во многих разных местах, включая /etc/profileсценарии запуска, такие как git-bash.vbsи gitk.cmd, и (хотя и немного сломанные) в git-wrapper.

Даже несвязанные проекты, такие как GitExtensionsи TortoiseGitдолжны реализовать ту же логику, чтобы иметь возможность напрямую вызывать git.

Инициализируйте HOMEв собственном коде запуска Git, чтобы мы могли в конечном итоге удалить весь дублирующий код инициализации.

Теперь mingw.c включает в себя следующий код:

/* calculate HOME if not set */
if (!getenv("HOME")) {
    /*
     * try $HOMEDRIVE$HOMEPATH - the home share may be a network
     * location, thus also check if the path exists (i.e. is not
     * disconnected)
     */
    if ((tmp = getenv("HOMEDRIVE"))) {
        struct strbuf buf = STRBUF_INIT;
        strbuf_addstr(&buf, tmp);
        if ((tmp = getenv("HOMEPATH"))) {
            strbuf_addstr(&buf, tmp);
            if (is_directory(buf.buf))
                setenv("HOME", buf.buf, 1);
            else
                tmp = NULL; /* use $USERPROFILE */
        }
        strbuf_release(&buf);
    }
    /* use $USERPROFILE if the home share is not available */
    if (!tmp && (tmp = getenv("USERPROFILE")))
        setenv("HOME", tmp, 1);
}

0

Я столкнулся с точно такой же проблемой. Мой домашний диск сопоставлен с сетевым диском. Также

  1. Нет доступа для записи на домашний диск
  2. Нет доступа к записи в профиле Git bash
  3. Нет прав администратора для изменения переменных среды из панели управления.

Однако ниже работает из командной строки и я смог добавить HOMEв переменные окружения.

rundll32 sysdm.cpl,EditEnvironmentVariables


Это просто ярлык консоли для доступа к редактору переменных среды
Рауль Салинас-Монтеагудо,

-1

Я знаю, что это старый вопрос, но это лучший результат 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.


1
Привет grsiepka - спасибо за ваш первый вклад в SO. Читая ваш ответ (я его проверяю), вырисовывается то, что это не столько ответ, сколько описание того, что вы все сделали, что не сработало;). Представьте, что другие пользователи ищут ответ и находят этот вопрос - тогда они ожидают / хотят получить (принятый) ответ, чтобы сообщить им, как решить их проблему. Хороший ответ написан с учетом этого. Можете ли вы отредактировать свой ответ и сделать его короче? Спасибо.
Карло Вуд

Ни один из «принятых» ответов не сработал для меня. Я отправил то, что сделал. Если это не поможет, не стесняйтесь удалить мой ответ.
grsiepka

-6

Вот, пожалуйста. Вот, пожалуйста. Создайте точку восстановления системы. Войдите под учетной записью администратора. Удалите папку C: \ SomeUser. Переместите папку c: \ Users \ SomeUser, чтобы она стала c: \ SomeUser. Откройте редактор реестра. Перейдите к HKLM \ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ \ Microsoft \ Windows NT \ CurrentVersion \ ProfileList. Ищите «ProfileImagePath», пока не найдете тот, который указывает на c: \ Users \ SomeUser. Измените его так, чтобы он указывал на c: \ SomeUser. Используйте Восстановление системы на случай, если что-то пойдет не так.


4
Это переместит его профиль пользователя Windows. Я не думаю, что это то, что он хочет.
Давид Ференчи Рогожан

1
И вполне возможно, что при корпоративной настройке он может не иметь разрешения на это.
Менахем
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.