在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
并设置$HOME
variables为任何你想要的(如果它不存在,就添加它)。 一个好的地方可能是,例如,在条件注释# 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。 如果出现问题,请使用系统还原。