Cambiar la ubicación del directorio ~ en una instalación de Windows de Git Bash

138

Ni siquiera estoy seguro de hacer la pregunta correcta. Déjame explicarte mi situación:

Esto es sobre Git en Windows 7.

Mi empresa configura el directorio de usuarios de Windows en una unidad de red, no en el disco duro local (para copias de seguridad y otros fines más allá del alcance de esta pregunta). No puedo cambiar esa política.

Sin embargo, PUEDO tener archivos locales fuera de ese esquema y así es como está configurado mi servidor Apache. Completamente local.

Instalé Git. Instala Bash. Cuando enciendo Bash y cd ~(cambio al directorio raíz) encuentro que (la raíz Bash) apunta a mi directorio de usuario de red. Quiero que no haga eso. Quiero ~estar en otra parte de mi disco duro. Lo deseo para que cuando realice otras operaciones, como instalar un certificado, una clave SSH, etc., sus valores predeterminados no usen automáticamente ese directorio de red.

He buscado en vano en todas partes, y todo lo que puedo encontrar se refiere a respuestas que implican alias, redireccionamiento y la ubicación a la que apunta $ HOME. Pero eso no es lo que quiero en absoluto.

La pregunta es: ¿puedo cambiar ese directorio? Y si es así: ¿cómo?

ACTUALIZACIÓN: Entonces, $ HOME es lo que necesito modificar. Sin embargo, no he podido encontrar dónde se establece esta mítica variable $ HOME, así que supuse que era una versión de PATH del sistema Linux o algo así. Como sea ...

Tengo un archivo de "perfil" debajo git/etc. Aquí están los contenidos (aviso no $ 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
PEWColina
fuente
~representa su directorio de inicio. Cambiar la HOMEvariable de entorno cambiará a dónde va.
Solo una nota: HOMEla variable de entorno no cambia solo a dónde ~apunta, sino que también todo lo que accede al directorio de inicio del usuario debe ir allí.
David Ferenczy Rogožan
~es solo una abreviatura de "directorio de inicio del usuario", por lo que donde sea que ~apunte, existe el directorio de inicio del usuario.
David Ferenczy Rogožan
Sí, no puedo encontrar esta variable $ HOME para configurarla. Arriba agregué el aspecto de mi archivo de perfil.
PEWColina
Ya veo, probablemente tengas una versión diferente de Git. ¿Qué versión tienes? Por cierto, intente agregar la configuración de INICIO al final del perfil. Pero es posible que se sobrescriba en otro lugar.
David Ferenczy Rogožan

Respuestas:

140

No entiendo por qué no desea establecer la $HOMEvariable de entorno ya que eso resuelve exactamente lo que está pidiendo.

cd ~no significa cambiar al directorio raíz , sino cambiar al directorio de inicio del usuario , que se establece mediante la $HOMEvariable de entorno.

Solución rápida y sucia

Edite C:\Program Files (x86)\Git\etc\profiley establezca la $HOMEvariable a lo que desee (agréguelo si no está allí). Un buen lugar podría ser, por ejemplo, justo después de una condición comentada por # Set up USER's home directory. Debe estar en formato MinGW, por ejemplo:

HOME=/c/my/custom/home

Guárdelo, abra Git Bash y ejecútelo cd ~. Deberías estar en un directorio /c/my/custom/homeahora.

Todo lo que acceda al perfil del usuario debe ir a este directorio en lugar del perfil de Windows en una unidad de red.

Nota: C:\Program Files (x86)\Git\etc\profile es compartido por todos los usuarios, por lo que si la máquina es utilizada por varios usuarios, es una buena idea configurar $HOMEdinámicamente:

HOME=/c/Users/$USERNAME

Solución más limpia

Establezca la variable de entorno HOMEen Windows en el directorio que desee. En este caso, debe configurarlo en el formato de ruta de Windows (con barras invertidas, por ejemplo c:\my\custom\home), Git Bash lo cargará y lo convertirá a su formato.

Si desea cambiar el directorio de inicio para todos los usuarios de su máquina , configúrelo como una variable de entorno del sistema , donde puede usar, por ejemplo, una %USERNAME%variable para que cada usuario tenga su propio directorio de inicio, por ejemplo:

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

Si desea cambiar el directorio de inicio solo para usted , configúrelo como una variable de entorno de usuario , para que otros usuarios no se vean afectados. En este caso, simplemente puede codificar la ruta completa:

HOME=c:\my\custom\home
David Ferenczy Rogožan
fuente
3
Gracias, no puedo encontrar una variable $ HOME en mi archivo de perfil. He agregado a la pregunta. Por favor echa un vistazo. tal vez necesito buscar en otra parte esa variable?
PEWColina
1
Ningún otro archivo en todo el directorio llama / establece $ HOME.
PEWColina
1
Entonces, ¿trataste de agregarlo en alguna parte? Por ejemplo al fondo de profile? Sólo una nota de que el contenido de la HOMEvariable debe tener este aspecto en git-bash: /c/some/path.
David Ferenczy Rogožan
66
Agregar HOME en la parte superior del archivo de perfil funcionó. HOME="c://path/to/custom/root/"
PEWColina
3
Agregar la variable de entorno del sistema 'home' resolvió el problema en lugar de editar el archivo de perfil en la carpeta git
firstpostcommenter
43

En mi caso, todo lo que tenía que hacer era agregar la siguiente variable de usuario en Windows:

Nombre de la HOME
variable: Valor de la variable:%USERPROFILE%

Cómo establecer una variable de entorno (puede usar la sección Variables de usuario para nombre de usuario si no es administrador del sistema)

EliandroRibeiro
fuente
3
Esto funcionó perfectamente para mí, y es una mejor solución IMO a la respuesta aceptada.
dan_g
2
Esta respuesta debería ir al principio.
user4015990
1
Esto funcionó, pero no cuando se usan múltiples usuarios en la misma máquina. Tuve que ir agregando HOME=/c/Users/$USERNAMEal perfil.
gonzo
3
Esta debería ser la mejor respuesta. Es la única forma (la única forma que pude encontrar) de hacer que GitBash use el directorio .ssh en mi carpeta de usuario de Windows (C: \ Users \ UserName). En mi sistema, el valor predeterminado era% HOMEDRIVE% (M :). ¡Y, por supuesto, seguirá funcionando después y se actualizará a GitBash!
YanisTheYak
1
Esto funciona si no tiene un conjunto de variables $ HOME, pero parece que el OP tiene $ HOME establecido por la política de la compañía. Yo también tengo su problema. Esta respuesta no funciona en ese caso (la nueva configuración se sobrescribe automáticamente por la política de la empresa).
bitsmack
38

Compartiría lo que hice, que funciona no solo para Git, sino también para MSYS / MinGW.

La HOMEvariable de entorno normalmente no está configurada para aplicaciones de Windows, por lo que crearla a través de Windows no afectó nada más. Desde las Propiedades de la computadora (haga clic con el botón derecho en Computadora, o como se llame) en el Explorador y seleccione Propiedades, o Panel de control -> Sistema y seguridad -> Sistema), elija Advanced system settings, luego Environment Variables...cree una nueva HOME, y asígnela donde quieras

Si no puede crear nuevas variables de entorno, la otra respuesta seguirá funcionando. (Revisé los detalles de cómo crear variables de entorno precisamente porque es muy difícil de encontrar).

Menachem
fuente
44
Si no tiene acceso de administrador para cambiar el entorno desde el panel de control, deberá emitir el siguiente comando rundll32 sysdm.cpl,EditEnvironmentVariables , desde el símbolo del sistema o escribir environmenten el menú de inicio para iniciar el mismo comando.
Chris Chiasson
2
Esto funcionó para mí para configurar el directorio de inicio para git-bash. Gracias por la seguridad de que está bien establecer la variable de entorno HOME en Windows, y también instrucciones detalladas sobre cómo hacerlo. Un cambio simple para lograr mi objetivo.
Stephen Hosking
%USERPROFILE%es un buen valor para su variable de entorno HOME . Ver mi respuesta
EliandroRibeiro
@EliandroRibeiro Esa es una posibilidad, y dependiendo de tus necesidades, quizás sea una buena idea. Para mí, específicamente no lo hice de esa manera. En parte para mantener separados los entornos similares a Windows y Unix (para evitar el desorden), y en parte para tener mi HOME( ~) más cerca del /árbol raíz . De hecho, creé un directorio C:/homey lo uso. Además, por cierto, el OP señaló que para él, el suyo %USERPROFILE%está en una unidad de red y es terriblemente doloroso de usar como lo describió.
Menachem
1
Sí, Menachem, agradezco su precisión, pero lo que quería lograr era simplemente los detalles del proceso pero enfatizar el resultado, lo cual ha sido confirmado por muchas personas, incluidos Stephen Hosking y yo. Es decir, para mí el resultado final importa, los otros detallados son más una distracción. Espero que estés bien contigo.
xpt
21

En lugar de modificar el global profile, puede crearlo .bash_profileen su $HOMEdirectorio predeterminado (por ejemplo C:\Users\WhateverUser\.bash_profile) con los siguientes contenidos:

export HOME="C:\my\projects\dir"
cd "$HOME" # if you'd like it to be the starting dir of the git shell
Dekkard
fuente
¡Si! .bash_profilees la forma correcta de personalizar su entorno, la piratería .profileno es una buena práctica.
roblogic
1
@ropata "piratear" ~/.profileestá bien. De hecho, los documentos lo prefieren ~/.bash_profie: "Los archivos adecuados para las variables de entorno que afectan solo a un usuario en particular (en lugar del sistema en su conjunto) son ... ~ / .profile". Y: "Los archivos de configuración de Shell como ... ~ / .bash_profile ... a menudo se sugieren para configurar variables de entorno. Si bien esto puede funcionar en shells de Bash para programas iniciados desde el shell, las variables establecidas en esos archivos no están disponibles de forma predeterminada a los programas iniciados desde el entorno gráfico en una sesión de escritorio ". help.ubuntu.com/community/EnvironmentVariables
Hawkeye Parker el
7

1.Haga clic derecho en el acceso directo de Gitbash, seleccione Propiedades
2.Elija la pestaña "Acceso directo"
3. Escriba su directorio de inicio en el campo "Inicio en"
4.Elimine la parte "--cd-to-home" del campo "Destino"

Özgür Öztürk
fuente
55
en realidad no cambia la $HOMEvariable
roblogic
1
¿Qué versión de Windows? No parece posible llegar a Propiedades en Windows 10.
Peter Mortensen
@PeterMortensen haga clic con el botón derecho en GITbash SHORTCUT y seleccione Propiedades
Özgür Öztürk
4

Entonces, $ HOME es lo que necesito modificar. Sin embargo, no he podido encontrar dónde se establece esta mítica variable $ HOME, así que supuse que era una versión de PATH del sistema Linux o algo así. De todos modos ... **

Responder

Agregar HOME en la parte superior del profilearchivo funcionó.

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
Duncan Jones
fuente
2

Entonces, $HOMEes lo que necesito modificar.

Sin embargo, no he podido encontrar dónde se establece esta $HOMEvariable mítica , por lo que supuse que era una versión de PATH del sistema Linux o algo así.

Git 2.23 (Q3 2019) es bastante explícito sobre cómo HOMEse configura.

Ver commit e12a955 (04 Jul 2019) por Karsten Blees ( kblees) .
(Fusionada por Junio ​​C Hamano - gitster- en commit fc613d2 , 19 jul 2019)

mingw: inicializar HOME al inicio

HOMELa inicialización se ha duplicado históricamente en muchos lugares diferentes, incluidos /etc/profilescripts de lanzamiento como git-bash.vbsy gitk.cmd, y (aunque ligeramente roto) en el git-wrapper.

Incluso los proyectos no relacionados como GitExtensionsy TortoiseGitnecesitan implementar la misma lógica para poder llamar a git directamente.

Inicialice HOMEen el propio código de inicio de Git para que eventualmente podamos retirar todo el código de inicialización duplicado.

Ahora, mingw.c incluye el siguiente código:

/* 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);
}
VonC
fuente
0

Me enfrenté exactamente al mismo problema. Mi unidad de inicio asignada a una unidad de red. también

  1. Sin acceso de escritura a la unidad de inicio
  2. Sin acceso de escritura al perfil de Git bash
  3. No hay derechos de administrador para cambiar las variables de entorno desde el panel de control.

Sin embargo, a continuación funcionó desde la línea de comandos y pude agregar HOMEvariables de entorno.

rundll32 sysdm.cpl,EditEnvironmentVariables

garg10may
fuente
Esto es solo un atajo de consola para acceder al editor de variables de entorno
Raúl Salinas-Monteagudo
-1

Sé que esta es una vieja pregunta, pero es el principal resultado de Google para "gitbash homedir windows", así que pensé en agregar mis hallazgos.

No importa lo que intenté, no pude hacer que git-bash se iniciara en otro lugar que no fuera mi unidad de red, (U :) en mi caso, haciendo que cada operación tarde entre 15 y 20 segundos en responder. (Empleado remoto en VPN, unidad de red alojada en el otro lado del país)

Traté de configurar las variables HOME y HOMEDIR en Windows.

Intenté configurar las variables HOME y HOMEDIR en el archivo git installation'setc / profile.

Intenté editar el "Inicio en" en el acceso directo de git-bash para ser C: / user / myusername.

El comando "env" dentro del shell git-bash mostraría c: / user / myusername correcto. Pero git-bash aún comenzaría en U:

Lo que finalmente lo arregló para mí fue editar el acceso directo de git-bash y eliminar el "--cd-to-home" de la línea Target.

Estoy en Windows 10 ejecutando la última versión de Git-for-windows 2.22.0.

grsiepka
fuente
1
Hola grsiepka: gracias por tu primera contribución a SO. Al leer su respuesta (la estoy revisando), lo que salta a la vista es que no es tanto una respuesta como una descripción de lo que todos intentaron que no funcionó;). Imagine a otros usuarios buscando una respuesta y encontrando esta pregunta; luego esperan / quieren que la respuesta (aceptada) les diga cómo solucionar su problema. Una buena respuesta se escribe con esto en mente. ¿Puedes editar tu respuesta y acortarla? Gracias.
Carlo Wood
Ninguna de las respuestas "aceptadas" funcionó para mí. Publiqué lo que hice. Si eso no es útil, no dude en eliminar mi respuesta.
grsiepka
-6

Aquí tienes: Aquí tienes: crea un punto de restauración del sistema. Inicie sesión con una cuenta de administrador. Elimine la carpeta C: \ SomeUser. Mueva la carpeta c: \ Users \ SomeUser para que se convierta en c: \ SomeUser. Abre el editor de registro. Vaya a HKLM \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ ProfileList. Busque "ProfileImagePath" hasta encontrar el que apunta a c: \ Users \ SomeUser. Modifíquelo para que apunte a c: \ SomeUser. Utilice Restaurar sistema en caso de que las cosas salgan mal.

Oz Bar-Shalom
fuente
44
Esto moverá su perfil de usuario de Windows. No creo que eso sea lo que él quiere.
David Ferenczy Rogožan
1
Y muy posiblemente, bajo una configuración corporativa, podría no tener permiso para esto.
Menachem