Змініть розташування каталогу ~ в інсталяції 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змінна середовище не змінюється лише там, де ~вказується, але і все, що має доступ до домашнього каталогу користувача.
Девід Ференчі Рогожан

~це лише скорочення до "домашнього каталогу користувача", тому там, де ~вказується, є домашній каталог користувача.
David Ferenczy Rogožan

Так, я не можу знайти цю змінну $ HOME, щоб її встановити. Вище я додав, як виглядає мій файл профілю.
PEWColina

Я бачу, напевно у вас є інша версія Git. Яка у вас версія? BTW спробуйте додати налаштування 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
Додавання змінної «будинок» система навколишнього середовища вирішити проблему , а не редагування файлу профілю в мерзотника папці
firstpostcommenter

43

У моєму випадку все, що мені потрібно було зробити, це додати таку змінну користувача у Windows:

Назва HOME
змінної: Значення змінної:%USERPROFILE%

Як встановити змінну навколишнього середовища (Ви можете використовувати розділи користувача для розділу користувача, якщо ви не системний адміністратор)


3
Це прекрасно працювало для мене і є кращим рішенням ІМО для прийнятої відповіді.
dan_g

2
Ця відповідь повинна йти до вершини.
user4015990

1
Це працювало, але не під час використання декількох користувачів на одній машині. Мені довелося піти з додаванням HOME=/c/Users/$USERNAMEдо профілю.
гонзо

3
Це має бути головна відповідь. Це єдиний спосіб (єдиний спосіб, який я міг знайти) отримати GitBash для використання каталогу .ssh в моїй папці користувача Windows (C: \ Users \ UserName). У моїй системі це було дефолтом до% HOMEDRIVE% (M :). І звичайно, вона все ще працюватиме після оновлення до GitBash!
YanisTheYak

1
Це працює, якщо у вас немає встановленої змінної $ HOME, але це здається, що ОП має $ HOME, встановлену політикою компанії. У мене є і його проблема. У цьому випадку ця відповідь не працює (нове налаштування автоматично перезаписується політикою компанії).
бітмак

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 Це можливість, і залежно від ваших потреб, можливо, хороша ідея. Для себе я спеціально цього не робив. Частково для того, щоб зберігати окремі середовища для Windows та Unix (щоб уникнути неполадок), а частково для того, щоб моє HOME( ~) було ближче до кореневого /дерева. Я фактично створив каталог C:/homeі використовую його. Крім того, BTW, OP зазначила, що для нього він %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
Hawkeye Parker

7

1. Клацніть правою кнопкою миші на ярлику Gitbash, виберіть "Властивості"
2.Виберіть вкладку "Ярлик" 3.Введіть
початковий каталог у поле "Почати в"
4. Видалити "- cd до дому" частина з поля "Ціль"


5
насправді не змінює $HOMEзмінну
roblogic

1
Яка версія Windows? Здається, неможливо потрапити до Властивості в 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 р.) Від Карстен Блейз ( kblees) .
(Об'єднав Хуніо С Хамано - 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 windows", тому я подумав, що я додам свої висновки.

Незалежно від того, що я намагався, я не міг запустити git-bash ніде, окрім мого мережевого накопичувача (U :) у моєму випадку, щоб кожна операція потребувала 15-20 секунд, щоб відповісти. (Віддалений працівник VPN, мережевий накопичувач, розташований в іншій частині країни)

Я спробував встановити HOME і HOMEDIR змінні у Windows.

Я спробував встановити HOME і HOMEDIR змінні у файлі git installation'setc / profile.

Я спробував редагувати "Почати в" на ярлику git-bash, щоб він був C: / user / myusername.

Команда "env" всередині оболонки git-bash показуватиме правильне c: / user / myusername. Але git-bash все одно розпочнеться в U:

Що в остаточному підсумку для мене виправило це редагування ярлика git-bash та видалення "--cd-to-home" з рядка Target.

Я в ОС Windows 10, на якій працює остання версія Git-for-Windows 2.22.0.


1
Привіт grsiepka - дякую за ваш перший внесок у ЗП. Читаючи вашу відповідь (я її рецензую), що вискакує, що це не стільки як відповідь, скільки опис того, що ви все намагалися, що не вийшло;). Уявіть, що інші користувачі шукають відповідь і знаходять це питання - тоді вони очікують / хочуть (прийнятої) відповіді сказати їм, як виправити свою проблему. Хороша відповідь написана з цим на увазі. Чи можете ви відредагувати свою відповідь і скоротити її? Дякую.
Карло Вуд

Жодна із «прийнятих» відповідей не працювала на мене. Я розмістив те, що зробив. Якщо це не корисно, сміливо зніміть мою відповідь.
grsiepka

-6

Ось ви йдете: Ось ви: Створіть точку відновлення системи. Увійдіть в обліковий запис адміністратора. Видаліть папку C: \ SomeUser. Перемістіть папку c: \ Users \ SomeUser, щоб вона стала c: \ SomeUser. Відкрийте редактор реєстру. Перейдіть до HKLM \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ ProfileList. Шукайте "ProfileImagePath", поки не знайдете той, який вказує на c: \ Users \ SomeUser. Змініть його так, щоб він вказував на c: \ SomeUser. Використовуйте відновлення системи у випадку, якщо все піде не так.


4
Це перемістить його профіль користувача Windows. Я не думаю, що він цього хоче.
David Ferenczy Rogožan

1
І дуже можливо, при корпоративній установці він може не мати дозволу на це.
Менахем
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.