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
~
representa su directorio de inicio. Cambiar laHOME
variable de entorno cambiará a dónde va.HOME
la 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í.~
es solo una abreviatura de "directorio de inicio del usuario", por lo que donde sea que~
apunte, existe el directorio de inicio del usuario.Respuestas:
No entiendo por qué no desea establecer la
$HOME
variable 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$HOME
variable de entorno.Solución rápida y sucia
Edite
C:\Program Files (x86)\Git\etc\profile
y establezca la$HOME
variable 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:Guárdelo, abra Git Bash y ejecútelo
cd ~
. Deberías 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 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$HOME
dinámicamente:Solución más limpia
Establezca la variable de entorno
HOME
en Windows en el directorio que desee. En este caso, debe configurarlo en el formato de ruta de Windows (con barras invertidas, por ejemploc:\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: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:
fuente
profile
? Sólo una nota de que el contenido de laHOME
variable debe tener este aspecto en git-bash:/c/some/path
.HOME="c://path/to/custom/root/"
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)
fuente
HOME=/c/Users/$USERNAME
al perfil.Compartiría lo que hice, que funciona no solo para Git, sino también para MSYS / MinGW.
La
HOME
variable 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), elijaAdvanced system settings
, luegoEnvironment Variables...
cree una nuevaHOME
, y asígnela donde quierasSi 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).
fuente
rundll32 sysdm.cpl,EditEnvironmentVariables
, desde el símbolo del sistema o escribirenvironment
en el menú de inicio para iniciar el mismo comando.%USERPROFILE%
es un buen valor para su variable de entorno HOME . Ver mi respuestaHOME
(~
) más cerca del/
árbol raíz . De hecho, creé un directorioC:/home
y 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ó.En lugar de modificar el global
profile
, puede crearlo.bash_profile
en su$HOME
directorio predeterminado (por ejemploC:\Users\WhateverUser\.bash_profile
) con los siguientes contenidos:fuente
.bash_profile
es la forma correcta de personalizar su entorno, la piratería.profile
no es una buena práctica.~/.profile
está 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/EnvironmentVariables1.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"
fuente
$HOME
variableEntonces, $ 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
profile
archivo funcionó.HOME="c://path/to/custom/root/"
.fuente
Git 2.23 (Q3 2019) es bastante explícito sobre cómo
HOME
se configura.Ver commit e12a955 (04 Jul 2019) por Karsten Blees (
kblees
) .(Fusionada por Junio C Hamano -
gitster
- en commit fc613d2 , 19 jul 2019)Ahora, mingw.c incluye el siguiente código:
fuente
Me enfrenté exactamente al mismo problema. Mi unidad de inicio asignada a una unidad de red. también
Sin embargo, a continuación funcionó desde la línea de comandos y pude agregar
HOME
variables de entorno.rundll32 sysdm.cpl,EditEnvironmentVariables
fuente
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.
fuente
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.
fuente