Je ne suis même pas sûr de poser la bonne question. Laissez-moi expliquer ma situation:
Il s’agit de Git sous Windows 7.
Mon entreprise configure le répertoire utilisateur Windows sur un lecteur réseau, et non sur le disque dur local (pour la sauvegarde et pour d’autres fins dépassant le cadre de cette question). Je ne peux pas changer cette politique.
Je peux avoir des fichiers locaux en dehors de ce schéma cependant et c'est comment mon serveur Apache est configuré. Entièrement local.
J'ai installé Git. Il installe Bash. Lorsque je lance Bash et cd ~
(changement dans le répertoire racine), je constate que cette dernière (la racine Bash) pointe vers mon répertoire utilisateur réseau. Je veux qu'il ne fasse pas ça. Je veux que ~
soit ailleurs sur mon disque dur. Je le souhaite afin que, lorsque j'effectue d'autres opérations, telles que l'installation d'un certificat, une clé SSH, etc., ses valeurs par défaut n'utilisent pas automatiquement ce répertoire réseau.
J'ai cherché en vain partout, et tout ce que je peux trouver fait référence à des réponses qui impliquent des alias, une redirection, et l'emplacement vers lequel pointe $ HOME. Mais ce n'est pas ce que je veux du tout.
La question est: Puis-je changer ce répertoire? Et si oui: comment?
MISE À JOUR: Donc, $ HOME est ce que je dois modifier. Cependant, n'ayant pas pu trouver où cette variable mythique $ HOME est définie, j'ai supposé qu'il s'agissait d'une version du système Linux de PATH ou quelque chose du genre. En tous cas...
J'ai un fichier "profil" sous git/etc
. Voici le contenu (notez 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
Je ne comprends pas pourquoi vous ne voulez pas définir la variable d'environnement $HOME
car cela résout exactement ce que vous demandez.
cd ~
ne signifie pas modifier le répertoire racine, mais modifier le répertoire de base de l'utilisateur , défini par la variable d'environnement $HOME
.
Je viens de le tester et cela fonctionne pour moi:
Ouvrez C:\Program Files (x86)\Git\etc\profile
et définissez la variable $HOME
sur ce que vous voulez (ajoutez-la si elle n’y est pas). Un bon endroit pourrait être par exemple juste après une condition commentée par # Set up USER's home directory
. Mettez là quelque chose comme ceci:
HOME=/c/my/custom/home
Enregistrez-le, ouvrez git-bash et exécutez cd ~
. Vous devriez être dans un répertoire /c/my/custom/home
maintenant.
Tout ce qui accède au profil de l'utilisateur doit aller dans ce répertoire au lieu de votre profil Windows sur un lecteur réseau.
Remarque: C:\Program Files (x86)\Git\etc\profile
est partagé par tous les utilisateurs. Par conséquent, si la machine est utilisée par plus d'utilisateurs, il est judicieux de définir le $HOME
de manière dynamique:
HOME=/c/Users/$USERNAME
Je vois que cette question a déjà reçu une réponse, mais je me trouve dans une situation similaire et je pensais partager ce que j'ai fait. Au départ, je l’ai fait, pas pour Git, mais pour MSYS/MinGW.
La variable d'environnement HOME
n'étant normalement pas définie pour les applications Windows, sa création via Windows n'a aucune incidence sur les éléments non souhaités. Dans les propriétés de l'ordinateur (cliquez avec le bouton droit sur Ordinateur - ou le nom de celui-ci - dans l'Explorateur, puis sélectionnez Propriétés ou Panneau de configuration -> Système et sécurité -> Système), choisissez Advanced system settings
, puis Evironment Variables...
et créez-en un nouveau, HOME
, et attribuez-le où vous voulez.
Si vous ne pouvez pas créer de nouvelles variables d'environnement, l'autre réponse fonctionnera toujours. (J'ai expliqué en détail comment créer des variables d'environnement, car il est si difficile à trouver.)
Dans mon cas, tout ce que je devais faire était d’ajouter la variable utilisateur suivante sous Windows:
Nom de la variable: HOME
Valeur de la variable: %USERPROFILE%
Comment définir une variable d'environnement (Vous pouvez utiliser les variables User pour la section nom_utilisateur si vous n'êtes pas administrateur système)
Au lieu de modifier la variable profile
globale, vous pouvez créer le .bash_profile
dans votre répertoire $HOME
par défaut (par exemple C:\Users\WhateverUser\.bash_profile
) avec le contenu suivant:
export HOME="C:\my\projects\dir"
cd "$HOME" # if you'd like it to be the starting dir of the git Shell
1.Clic droit sur le raccourci Gitbash, choisissez Propriétés.
2.Choisissez l'onglet "Raccourci"
3. Tapez votre répertoire de départ dans le champ "Démarrer dans"
4.Retirer la partie "--cd-to-home" du champ "Target"
Donc, $ HOME est ce que je dois modifier. Cependant, n'ayant pas pu trouver où cette variable mythique $ HOME est définie, j'ai supposé qu'il s'agissait d'une version du système Linux de PATH ou quelque chose du genre. En tous cas ...**
L'ajout de HOME en haut du fichier profile
a fonctionné.
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
J'ai fait face exactement au même problème. Mon lecteur local mappé sur un lecteur réseau. Également 1. Aucun accès en écriture au lecteur à domicile 3. Pas d’accès en écriture au profil Git bash 4. Aucun droit d'administrateur pour modifier les variables d'environnement à partir du panneau de configuration.
Cependant, ci-dessous a fonctionné à partir de la ligne de commande et j'ai pu ajouter HOME
aux variables d'environnement.
rundll32 sysdm.cpl,EdtEnvironmentVariables
Donc,
$HOME
est ce que je dois modifier.Cependant, je suis incapable de trouver où cette variable mythique
$HOME
est définie. J'ai donc supposé qu'il s'agissait d'une version du système Linux de PATH ou de quelque chose du genre.
Git 2.23 (Q3 2019) est assez explicite sur la définition de HOME
.
Voir commit e12a955 (04 juil. 2019) par Karsten Blees (kblees
) .
(Fusionné par Junio C Hamano - gitster
- dans commit fc613d2 , 19 juillet 2019)
mingw: initialise HOME au démarrage
L'initialisation de
HOME
était historiquement dupliquée à différents endroits, notamment/etc/profile
, des scripts de lancement tels quegit-bash.vbs
etgitk.cmd
, et (bien que légèrement cassé) dans legit-wrapper
.Même des projets indépendants, tels que
GitExtensions
etTortoiseGit
doivent implémenter la même logique pour pouvoir appeler directement git.Initialisez
HOME
dans le code de démarrage de Git afin que nous puissions éventuellement supprimer tout le code d'initialisation en double.
Maintenant, mingw.c inclut le code suivant:
/* 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); }