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

Posted

技术标签:

【中文标题】在 Git Bash 的 Windows 安装中更改 ~ 目录的位置【英文标题】:Change the location of the ~ directory in a Windows install of Git Bash 【发布时间】:2015-11-20 20:49:56 【问题描述】:

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

这是关于 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 环境变量不仅会更改~ 指向的位置,而且访问用户主目录的所有内容都应该在那里。 ~ 只是“用户主目录”的简写,所以~ 指向的地方就是用户的主目录。 是的,我找不到这个 $HOME 变量来设置它。上面我添加了我的个人资料文件的样子。 我明白了,你可能有不同版本的 Git。你有什么版本?顺便说一句,尝试将 HOME 设置添加到配置文件的末尾。但它有可能会在其他地方被覆盖。 【参考方案1】:

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

【讨论】:

这将移动他的 Windows 用户配置文件。我不认为那是他想要的。 很可能,在公司设置下,他可能没有权限。【参考方案2】:

我不明白,为什么您不想设置 $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

更清洁的解决方案

在 Windows 中将环境变量 HOME 设置为您想要的任何目录。在这种情况下,您必须将其设置为 Windows 路径格式(带有反斜杠,例如 c:\my\custom\home),Git Bash 将加载它并将其转换为它的格式。

如果您想更改您机器上所有用户的主目录,请将其设置为系统环境变量,您可以在其中使用例如%USERNAME% 变量所以每个用户都会有自己的主目录,例如:

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

如果您想只为自己更改主目录,请将其设置为用户环境变量,这样其他用户就不会受到影响。在这种情况下,您可以简单地对整个路径进行硬编码:

HOME=c:\my\custom\home

【讨论】:

谢谢,我在配置文件中找不到 $HOME 变量。我已经添加到问题中。请看一下。也许我需要在别处寻找那个变量? 整个目录中没有其他文件调用/设置 $HOME。 那么您是否尝试将其添加到任何地方?比如底部profile?请注意,HOME 变量的内容在 git-bash 中应如下所示:/c/some/path 在配置文件顶部添加 HOME 有效。HOME="c://path/to/custom/root/" 添加 'home' 系统环境变量解决了这个问题,而不是编辑 git 文件夹中的配置文件【参考方案3】:

我会分享我所做的,它不仅适用于 Git,也适用于 MSYS/MinGW。

HOME 环境变量通常不会为 Windows 应用程序设置,因此通过 Windows 创建它不会影响其他任何内容。从计算机属性(在资源管理器中右键单击计算机 - 或任何名称 - 并选择属性,或控制面板 -> 系统和安全 -> 系统),选择 Advanced system settings,然后选择 Environment Variables... 并创建一个新的一,HOME,然后分配到任何你喜欢的地方。

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

【讨论】:

If you don't have admin access to change the environment from the control panel, you will need to issue the following command, rundll32 sysdm.cpl,EditEnvironmentVariables,从命令提示符,或在开始菜单中键入 environment 以启动相同的命令。 这对我为 git-bash 设置主目录有用。感谢您再次保证可以在 Windows 中设置 HOME 环境变量,以及有关如何设置的详细说明。一个简单的改变来实现我的目标。 %USERPROFILE% 对您的 HOME 环境变量来说是一个很好的值。 See my answer @EliandroRibeiro 这是一种可能,根据您的需要,这可能是个好主意。就我自己而言,我特别这样做。部分是为了将 Windows 和类 Unix 环境分开(以避免混乱),部分是为了让我的 HOME (~) 更接近根 / 树。我实际上创建了一个目录C:/home 并使用它。另外,顺便说一句,OP 指出,对他来说,他的 %USERPROFILE% 位于网络驱动器上,如您所描述的那样使用起来非常痛苦。 是的,Menachem,我很欣赏你的精确,但我想要实现的是简单的过程细节,但强调结果,这一点已经得到包括 Stephen Hosking 和我在内的许多人的证实。即,对我来说,最终结果很重要,其他细节更多的是分散注意力。希望你没事。【参考方案4】:

您可以在默认的$HOME 目录(例如C:\Users\WhateverUser\.bash_profile)中使用以下内容创建.bash_profile,而不是修改全局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 不是好的做法。 @ropata "hacking" ~/.profile 很好。事实上,与~/.bash_profie 相比,文档更喜欢它:“仅影响特定用户(而不是整个系统)的环境变量的合适文件是...~/.profile。”并且:“Shell 配置文件,例如 ...~/.bash_profile ... 通常建议用于设置环境变量。虽然这可能适用于从 shell 启动的程序的 Bash shell,但这些文件中设置的变量默认情况下不可用到桌面会话中从图形环境启动的程序。” help.ubuntu.com/community/EnvironmentVariables【参考方案5】:

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

【讨论】:

实际上并没有改变 $HOME 变量 什么版本的 Windows?在 Windows 10 中似乎无法访问 Properties @PeterMortensen 右键单击​​ Gitbash 快捷方式选择属性 呃,这就是我所需要的,谢谢。快捷方式进入 Git 程序文件夹,而 .bash_profile/.bashrc 没有任何效果。最后只需将 Start In 文件夹设置为我的主目录,一切都很好。正如原始海报所说,这与我公司的主目录分配有关。 对我来说,它结合了@ÖzgürÖztürk 和@dekkad 的两个答案。似乎删除 --cd-to-home 让 git 在 Your_username 中搜索 .batch_profile【参考方案6】:

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

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

How to set a Environment Variable(如果您不是系统管理员,可以使用用户名的用户变量部分)

【讨论】:

这对我来说非常有效,并且是 IMO 对公认答案的更好解决方案。 这个答案应该放到顶部。 这有效,但在同一台机器上使用多个用户时无效。我不得不将HOME=/c/Users/$USERNAME 添加到个人资料中。 这应该是最佳答案。这是让 GitBash 使用我的 Windows 用户文件夹 (C:\Users\UserName) 中的 .ssh 目录的唯一方法(我能找到的唯一方法)。在我的系统上,它默认为 %HOMEDRIVE% (M:)。当然,在更新到 GitBash 之后它仍然可以工作! 如果您没有设置 $HOME 变量,则此方法有效,但听起来 OP 已按照公司政策设置了 $HOME。我也有他的问题。此答案在这种情况下不起作用(新设置会自动被公司政策覆盖)。【参考方案7】:

所以,$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

【讨论】:

【参考方案8】:

我遇到了完全相同的问题。我的家庭驱动器映射到网络驱动器。还有

    没有对家庭驱动器的写入权限 没有对 Git bash 配置文件的写入权限 没有管理员权限可以从控制面板更改环境变量。

但是下面是从命令行工作的,我能够将HOME 添加到环境变量中。

rundll32 sysdm.cpl,EditEnvironmentVariables

【讨论】:

这只是访问环境变量编辑器的控制台快捷方式【参考方案9】:

我知道这是一个老问题,但它是“gitbash homedir windows”的最高谷歌搜索结果,所以我想添加我的发现。

无论我尝试什么,我都无法让 git-bash 在我的网络驱动器之外的任何地方启动,(U:) 在我的情况下,每个操作需要 15-20 秒才能响应。 (*** 上的远程员工,网络驱动器托管在国家的另一端)

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

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

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

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

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

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

【讨论】:

嗨 grsiepka - 感谢您对 SO 的首次贡献。阅读您的答案(我正在审查它),跳出来的是,它与其说是一个答案,不如说是对您所做的所有尝试都不起作用的描述;)。想象一下其他用户正在寻找答案并找到这个问题 - 然后他们期望/想要(接受的)答案告诉他们如何解决他们的问题。考虑到这一点,写了一个很好的答案。您可以编辑您的答案并使其更短吗?谢谢。 没有一个“接受”的答案对我有用。我发布了做了什么。如果这没有帮助,请随时删除我的答案。【参考方案10】:

所以,$HOME 是我需要修改的。

但是我一直无法找到这个神秘的 $HOME 变量的设置位置,所以我认为它是 PATH 的 Linux 系统版本或其他东西。

Git 2.23(2019 年第三季度)非常明确地说明了 HOME 的设置方式。

参见Karsten Blees (kblees)commit e12a955(2019 年 7 月 4 日)。(由 Junio C Hamano -- gitster -- 合并于 commit fc613d2,2019 年 7 月 19 日)

mingw:启动时初始化 HOME

HOME 初始化历来在许多不同的地方重复, 包括/etc/profile,启动脚本如git-bash.vbsgitk.cmd, 和git-wrapper 中的(虽然略有损坏)。

即使是 GitExtensionsTortoiseGit 等不相关的项目也需要 实现同样的逻辑就可以直接调用git了。

在 Git 自己的启动代码中初始化 HOME 以便我们最终可以退休 所有重复的初始化代码。

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

【讨论】:

以上是关于在 Git Bash 的 Windows 安装中更改 ~ 目录的位置的主要内容,如果未能解决你的问题,请参考以下文章

使用Git Bash for Windows

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

如何在 Windows 上将 man 和 zip 添加到“git bash”安装中

Windows10 下Windows Terminal Preview配置Git bash

Windows10 下Windows Terminal Preview配置Git bash

Windows10 下Windows Terminal Preview配置Git bash