在GIT bash的Windows安装中更改〜目录的位置

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

这是关于在Win7的GIT。

我的公司在不在本地硬盘上的networking驱动器上设置Windows用户目录(用于超出此问题范围的备份和其他目的)。 我不能改变这个政策。

我可以有本地文件之外的scheme,但是这就是我的Apache服务器设置。 完全是本地的。

我安装了GIT。 它安装bash。 当我启动bash和CD〜(切换到根目录)时,我发现它(bash root)指向我的networking用户目录。 我希望不要这样做。 我想〜在我的硬盘上的其他地方。 我想这样做,当我执行其他操作,如安装证书,SSH密钥等,它的默认值将不会自动使用该networking目录。

我到处search都是徒劳的,所有我能find的都是涉及别名,redirect,$ HOME指向的位置的答案。 但那不是我想要的。

问题是:我可以改变那个目录吗? 如果是这样的话:怎么样?

我在git / etc下有一个“profile”文件(见下文)。 注意没有$ HOMEvariables

谢谢

更新:所以,$ HOME是我需要修改。 不过,我一直无法find这个神话的$ HOMEvariables设置,所以假设它是一个LINUX系统版本的path或东西。 无论如何….

回答

在configuration文件顶部添加HOME工作。 HOME="c://path/to/custom/root/" 。 谢谢Dawid Ferenczy

新编辑:请@Menachem的答案。 我曾经使用过,它也起作用。

  #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 "# CAUTION #" 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环境variables,因为这解决了你所要求的。

cd ~并不意味着改变根目录 ,而是改变到$HOME环境variables设置的用户主目录

我只是testing它,它适用于我:

打开C:\Program Files (x86)\Git\etc\profile并设置$HOMEvariables为任何你想要的(如果它不存在,就添加它)。 一个好的地方可能是,例如,在条件注释# Set up USER's home directory 。 把这样的东西放在那里:

 HOME=/c/my/custom/home 

保存它,打开git-bash并执行cd ~ 。 你现在应该在/c/my/custom/home目录下。

访问用户configuration文件的所有内容都应该进入该目录,而不是在networking驱动器上的Windowsconfiguration文件。

注意: C:\Program Files (x86)\Git\etc\profile是所有用户共享的,所以如果机器被更多用户使用,那么dynamic设置$HOME是一个好主意:

 HOME=/c/Users/$USERNAME 

我看到这个问题已经有了答案,但是我也遇到了类似的情况,我想我会分享我所做的。 我原本是这样做的,不是为了Git,而是为了MSYS / MinGW。

HOME环境variables通常不是为Windows应用程序设置的,所以通过Windows创build它并不会影响我不想影响的任何内容。 从“计算机属性”(在资源pipe理器中右键单击“计算机”或任何其名称),然后select“属性”或“控制面板”→“系统和安全”→“系统”,select“ Advanced system settings ,然后select“ Evironment Variables...一个新的, HOME ,并分配它,只要你喜欢。

如果你不能创build新的环境variables,另一个答案仍然可以工作。 (我经历了如何创build环境variables的细节,因为它很难find。)

不用修改全局profile你可以在默认的$HOME目录(例如C:\Users\WhateverUser\.bash_profile )中创build.bash_profile ,内容如下:

 export HOME="C:\my\projects\dir" cd "$HOME" # if you'd like it to be the starting dir of the git shell 

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

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

variables名称: HOME
variables值: %USERPROFILE%

如何设置环境variables (如果您不是系统pipe理员,则可以使用用户名用户variables部分)

在这里你去了:创build一个系统还原点。 以pipe理员帐户login。 删除文件夹C:\ SomeUser。 将文件夹c:\ Users \ SomeUser移动到c:\ SomeUser。 打开registry编辑器。 导航到HKLM \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ ProfileList。 search“ProfileImagePath”,直到find指向c:\ Users \ SomeUser的那个。 修改它,使它指向c:\ SomeUser。 如果出现问题,请使用系统还原。