tag remove practices crear best git msysgit git-bash mingw32 msys2

remove - git tag commit id



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

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í.

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

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

HOME inicialización de HOME se duplicó históricamente en muchos lugares diferentes, incluidos /etc/profile , scripts de lanzamiento como git-bash.vbs y gitk.cmd y (aunque ligeramente roto) en el git-wrapper .

Incluso los proyectos no relacionados como GitExtensions y TortoiseGit necesitan implementar la misma lógica para poder llamar a git directamente.

Inicialice HOME en 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); }

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

Esto se trata de 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 quiero 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" en 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


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


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. Navegue 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.


En lugar de modificar el profile global, puede crear el .bash_profile en su directorio $HOME predeterminado (por ejemplo, C:/Users/WhateverUser/.bash_profile ) con el siguiente contenido:

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


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

Nombre de la variable: HOME
Valor 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)


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 archivo de profile 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


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 HOME a las variables de entorno.

rundll32 sysdm.cpl,EditEnvironmentVariables


No entiendo por qué no desea establecer la variable de entorno $HOME 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 variable de entorno $HOME .

Solución rápida y sucia

Edite C:/Program Files (x86)/Git/etc/profile y configure la variable $HOME 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 ejecute cd ~ . Debería estar en un directorio /c/my/custom/home ahora.

Todo lo que acceda al perfil del usuario debe ir a este directorio en lugar del perfil de su 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 múltiples usuarios, es una buena idea configurar dinámicamente $HOME :

HOME=/c/Users/$USERNAME

Solución más limpia

Establezca una variable de entorno HOME en Windows para lo que desee. En este caso, debe configurarlo en el formato de ruta de Windows (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 en su máquina , configúrelo como una variable de entorno del sistema , donde puede usar, por ejemplo, la variable %USERNAME% 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


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 que sea C: / user / myusername.

El comando "env" dentro del shell git-bash mostraría c: / user / myusername correcto. Pero git-bash todavía 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.


Veo que esta pregunta ya está respondida, pero estoy en una situación similar y pensé en compartir lo que hice. Originalmente hice esto, no para Git, sino para MSYS / MinGW.

La variable de entorno HOME normalmente no está configurada para las aplicaciones de Windows, por lo que crearla a través de Windows no afectó a nada que no quisiera afectar. 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 Evironment Variables... Advanced system settings Evironment Variables... y cree uno nuevo, HOME , y asígnelo donde quiera.

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).