在Windows安装的Git Bash中更改〜目录的位置


138

我什至不确定我在问正确的问题。让我解释一下我的情况:

这是关于Windows 7上的Git。

我公司在网络驱动器而不是本地硬盘驱动器上设置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 FerenczyRogožan,2015年

~只是“用户主目录”的简写,因此无论~指向何处,都存在用户的主目录。
David FerenczyRogožan,2015年

是的,我找不到这个$ HOME变量来设置它。在上面,我添加了我的个人资料文件。
PEWColina 2015年

我知道,您可能使用了其他版本的Git。您有什么版本?BTW尝试将HOME的设置添加到配置文件的末尾。但是有可能它会被其他地方覆盖。
David FerenczyRogožan,2015年

Answers:


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 2015年

1
整个目录中没有其他文件调用/设置$ HOME。
PEWColina 2015年

1
那么,您是否尝试将其添加到任何地方?例如到底部profile?只是一张纸条,上面的内容HOME变量应该是这样的混帐bash下/c/some/path
David FerenczyRogožan2015年

6
在个人资料文件顶部添加HOME的工作正常。HOME="c://path/to/custom/root/"
PEWColina

3
添加“家庭”系统环境变量解决了该问题,而不是编辑git文件夹中的配置文件
firstpostcommenter

43

就我而言,我要做的就是在Windows上添加以下User变量

变量名称:HOME
变量值:%USERPROFILE%

如何设置环境变量(如果您不是系统管理员,则可以使用“ 用户名用户变量”部分)


3
这对我来说非常有效,并且是IMO对已接受答案的更好解决方案。
dan_g

2
这个答案应该放在顶部。
user4015990

1
这有效,但在同一台计算机上使用多个用户时则无效。我必须添加HOME=/c/Users/$USERNAME个人资料。
贡佐

3
这应该是最佳答案。这是让GitBash使用Windows用户文件夹(C:\ Users \ UserName)中的.ssh目录的唯一方法(我能找到的唯一方法)。在我的系统上,它默认为%HOMEDRIVE%(M :)。当然,它在更新到GitBash之后仍然可以使用!
YanisTheYak,

1
如果您没有设置$ HOME变量,则此方法有效,但听起来OP是由公司策略设置的$ HOME。我也有他的问题。在这种情况下,此答案无效(新设置会被公司政策自动覆盖)。
bitsmack

38

我将分享我所做的工作,该工作不仅适用于Git,而且适用于MSYS / MinGW。

HOME环境变量通常不设置Windows应用程序,所以通过Windows创建它没有影响到任何东西。在“计算机属性”中(在资源管理器中右键单击“计算机”或“计算机”,然后选择“属性”,或选择“控制面板”->“系统和安全性”->“系统”),选择Advanced system settings,然后Environment Variables...创建一个新的HOME,并将其分配无论您在哪里。

如果您无法创建新的环境变量,则其他答案仍然有效。(我详细地介绍了如何创建环境变量的细节,因为很难找到它。)


4
如果您没有管理员权限来通过控制面板更改环境,则需要 rundll32 sysdm.cpl,EditEnvironmentVariables从命令提示符处发出以下命令,或environment在开始菜单中键入以启动同一命令。
克里斯·基亚森

2
这对我来说为git-bash设置主目录很有用。感谢您再次保证可以在Windows中设置HOME环境变量,以及有关如何执行此操作的详细说明。一个简单的更改即可实现我的目标。
斯蒂芬·霍斯金

%USERPROFILE%对您的HOME环境变量而言是一个很好的价值。看到我的回答
EliandroRibeiro

@EliandroRibeiro这是一种可能,根据您的需求,也许是个好主意。对于我自己,我特别不愿意这样做。一方面使Windows和类Unix环境分开(以避免混乱),另一方面使my HOME~)更靠近根/树。我实际上创建了一个目录C:/home并使用它。顺便说一句,顺便说一句,OP指出对他来说,他%USERPROFILE%在网络驱动器上,使用起来很痛苦。
Menachem '18

1
是的Menachem,非常感谢您的精确,但是我想要实现的只是简单的过程细节,但强调结果,这一点已得到包括Stephen Hosking和我在内的许多人的证实。即,对我而言,最终结果很重要,其他详细信息更让人分心。希望你能接受。
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 ...之类的shell配置文件来设置环境变量。虽然这对于从shell启动的程序在Bash shell上可能有效,但默认情况下,这些文件中设置的变量不可用从桌面会话中的图形环境启动的程序。” help.ubuntu.com/community/EnvironmentVariables
Hawkeye Parker

7

1.右键单击Gitbash快捷方式,选择“属性”
2. 选择“快捷方式”选项卡
3.在“开始于”字段中
键入您的起始目录4.从“目标”字段中删除“ --cd-to-home”部分


5
并没有真正改变$HOME变量
roblogic

1
什么版本的Windows?这似乎并不可能去属性在Windows 10
彼得·莫特森

@PeterMortensen鼠标右击Gitbash快捷方式选择属性
Özgür的Öztürk的

4

因此,$ HOME是我需要修改的。但是,我无法找到这个神话般的$ HOME变量的位置,因此我认为它是PATH的Linux系统版本。无论如何 ... **

回答

profile文件顶部添加HOME的工作正常。

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(2019年第三季度)非常明确 HOME设置。

参见Karsten Blees()的commit e12a955(2019年7月4日(通过合并JUNIOÇ滨野- -提交fc613d2,2019年7月19日)kblees
gitster

mingw:在启动时初始化HOME

HOME初始化在许多不同的地方历来都是重复的,包括/etc/profile启动脚本(例如git-bash.vbs和)gitk.cmd,以及(尽管有些破损)git-wrapper

甚至不相关的项目(例如GitExtensions和)也TortoiseGit需要实现相同的逻辑才能直接调用git。

使用HOMEGit自己的启动代码进行初始化,以便我们最终可以淘汰所有重复的初始化代码。

现在,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

我知道这是一个老问题,但这是“ gitbash homedir Windows”在google上的最高搜索结果,所以我想添加我的发现。

无论我尝试什么,我都无法使git-bash在我的网络驱动器之外的任何地方启动,在我的情况下,使每个操作都需要15到20秒来响应。(远程员工使用VPN,网络驱动器托管在该国的另一端)

我尝试在Windows中设置HOME和HOMEDIR变量。

我尝试在git安装的etc / profile文件中设置HOME和HOMEDIR变量。

我尝试将git-bash快捷方式上的“开始于”编辑为C:/ user / myusername。

git-bash shell中的“ env”命令将显示正确的c:/ user / myusername。但是git-bash仍将以U开头:

最终为我解决的是编辑git-bash快捷方式并从目标行中删除“ --cd-to-home”。

我在运行最新版Git-for-Windows 2.22.0的Windows 10上。


1
嗨,grsiepka-感谢您为SO所做的第一项贡献。阅读您的答案(我正在对其进行复审)后,您会发现,它不仅是答案,而且还描​​述了您所做的所有尝试都无效的内容;)。想象其他用户正在寻找答案并找到这个问题-然后他们期望/希望(接受)答案来告诉他们如何解决他们的问题。考虑到这一点,写出了一个很好的答案。您可以编辑答案并缩短答案吗?谢谢。
卡罗·伍德

没有一个“可接受的”答案对我有用。我张贴了什么。如果那没有帮助,请随时删除我的答案。
grsiepka '19

-6

到这里去:到这里去:创建系统还原点。使用管理员帐户登录。删除文件夹C:\ SomeUser。移动文件夹c:\ Users \ SomeUser,使其变为c:\ SomeUser。打开注册表编辑器。导航到HKLM \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ ProfileList。搜索“ ProfileImagePath”,直到找到指向c:\ Users \ SomeUser的那个。对其进行修改,使其指向c:\ SomeUser。如果出现问题,请使用系统还原。


4
这将移动他的Windows用户个人资料。我认为那不是他想要的。
David FerenczyRogožan2015年

1
而且很有可能,在公司设置下,他可能对此没有许可。
Menachem
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.