Change the location of ~ directory in a Windows install of GIT bash

I am not even sure I am asking the right question. Let me explain my situation:

This is about GIT on win7.

  • How to replace a git submodule with vendored in code?
  • Splitting a repository with the possibility to later pull changes
  • How can I see the list of all commits that affect a specific file with git (including orphaned or dangling commits)
  • Tracking changes using git during code review (stash vs. branch)
  • Git show whole file changes
  • How can i completely undo git commit just done
  • My company sets up the Windows user directory on a network drive not on the local hard drive(for backup and other purposes beyond the scope of this question). I cannot change that policy.

    I CAN have local files outside of that scheme however and that is how my apache server is set up. Entirely local.

    I installed GIT. It installs bash. When I fire up bash and CD ~ (change to the root directory) I find that it(the bash root) points to my network user directory. I want it not to do that. I want ~ to be elsewhere on my hard drive. I want it so that when I perform other operations such as installing a certificate, a ssh key, etc. it’s defaults will not automatically use that network directory.

    I have searched in vain everywhere and all I can find refers to answers that involve aliases, redirection, the location $HOME points to. But that is not what I want at all.

    The question is: Can I change that directory? and if so: How?

    I do have a “profile” file (see below) under git/etc. Notice there is no $HOME variable

    Thanks

    UPDATE: So, $HOME is what I need to modify. However I have been unable to find where this mythical $HOME variable is set so a assumed the it was a LINUX system version of PATH or something. ANYWAY….

    Answer

    Adding HOME at the top of the profile file worked.
    HOME="c://path/to/custom/root/".
    Thanks Dawid Ferenczy

    NEW EDIT: please @Menachem ‘s answer. I have used since and it works too.

      #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
    

  • Deleting a remote branch with Egit
  • Exclude git ignore on one particular directory inside an already gitignored directory
  • git: command not found (on OS X 10.5)
  • Does git return specific return error codes?
  • Pull from Git Bare Repository Doesn't Have Pushed Commits
  • Using Git diff to detect code movement + How to use diff options
  • 5 Solutions collect form web for “Change the location of ~ directory in a Windows install of GIT bash”

    I don’t understand, why you don’t want to set the $HOME environment variable since that solves exactly what you’re asking for.

    cd ~ doesn’t mean change to the root directory, but change to the user’s home directory, which is set by the $HOME environment variable.

    I just tested it and it works for me:

    Open C:\Program Files (x86)\Git\etc\profile and set $HOME variable to whatever you want (add it if it’s not there). A good place could be for example right after a condition commented by # Set up USER's home directory. Put there something like this:

    HOME=/c/my/custom/home
    

    Save it, open git-bash and execute cd ~. You should be in a directory /c/my/custom/home now.

    Everything that accesses the user’s profile should go into this directory instead of your Windows’ profile on a network drive.

    Note: C:\Program Files (x86)\Git\etc\profile is shared by all users, so if the machine is used by more users, it’s a good idea to set the $HOME dynamically:

    HOME=/c/Users/$USERNAME
    

    I see this question is already answered, but I am in a similar situation, and I thought I’d share what I did. I originally did this, not for Git, but for MSYS/MinGW.

    The HOME environment variable is not normally set for Windows applications, so creating it through Windows did not affect anything I did not want affected. From the Computer Properties (right-click on Computer – or whatever it is named – in Explorer, and select Properties, or Control Panel -> System and Security -> System), choose Advanced system settings, then Evironment Variables... and create a new one, HOME, and assign it wherever you like.

    If you can’t create new environment variables, the other answer will still work. (I went through the details of how to create environment variables precisely because it’s so dificult to find.)

    Instead of modifying the global profile you could create the .bash_profile in your default $HOME directory (e.g. C:\Users\WhateverUser\.bash_profile) with the following contents:

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

    1.Right click to Gitbash shortcut choose Properties
    2.Choose “Shortcut” tab
    3.Type your starting directory to “Start in” field
    4.Remove “–cd-to-home” part from “Target” field

    Here you go:
    Here you go:
    Create a System Restore Point.
    Log on under an admin account.
    Delete the folder C:\SomeUser.
    Move the folder c:\Users\SomeUser so that it becomes c:\SomeUser.
    Open the registry editor.
    Navigate to HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList.
    Search for “ProfileImagePath” until you find the one that points at c:\Users\SomeUser.
    Modify it so that it points at c:\SomeUser.
    Use System Restore in case things go wrong.

    Git Baby is a git and github fan, let's start git clone.