Changer l'emplacement du répertoire ~ dans une installation Windows de Git Bash

138

Je ne suis même pas sûr de poser la bonne question. Laissez-moi vous expliquer ma situation:

Il s'agit de Git sur Windows 7.

Mon entreprise configure le répertoire des utilisateurs Windows sur un lecteur réseau, et non sur le disque dur local (à des fins de sauvegarde et à d'autres fins dépassant le cadre de cette question). Je ne peux pas changer cette politique.

Cependant, je PEUX avoir des fichiers locaux en dehors de ce schéma et c'est ainsi que mon serveur Apache est configuré. Entièrement local.

J'ai installé Git. Il installe Bash. Quand je lance Bash et cd ~(passe dans le répertoire racine), je trouve qu'il (la racine Bash) pointe vers mon répertoire d'utilisateurs réseau. Je veux qu'il ne fasse pas ça. Je veux ~être ailleurs sur mon disque dur. Je veux que lorsque j'effectue d'autres opérations telles que l'installation d'un certificat, d'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 se réfère à des réponses qui impliquent des alias, des redirection et l'emplacement vers lequel pointe $ HOME. Mais ce n'est pas du tout ce que je veux.

La question est: puis-je modifier ce répertoire? Et si oui: comment?

MISE À JOUR: Donc, $ HOME est ce que je dois modifier. Cependant, je n'ai pas pu trouver où cette variable mythique $ HOME est définie, donc j'ai supposé qu'il s'agissait d'une version système Linux de PATH ou quelque chose. Bref ...

J'ai un fichier "profil" sous git/etc. Voici le contenu (notez pas $ 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
la source
~représente votre répertoire personnel. La modification de la HOMEvariable d'environnement changera sa destination.
Juste une note: HOMEla variable d'environnement ne change pas seulement où ~pointe, mais aussi tout ce qui accède au répertoire personnel de l'utilisateur doit y aller.
David Ferenczy Rogožan
~est juste un raccourci pour «répertoire personnel de l'utilisateur», donc partout où ~pointe, il y a le répertoire personnel de l'utilisateur.
David Ferenczy Rogožan
Oui, je ne trouve pas cette variable $ HOME pour la définir. Ci-dessus, j'ai ajouté à quoi ressemble mon fichier de profil.
PEWColina
Je vois, vous avez probablement une version différente de Git. Quelle version avez-vous? BTW essayez d'ajouter le réglage de HOME à la fin du profil. Mais il est possible qu'il soit écrasé ailleurs.
David Ferenczy Rogožan

Réponses:

140

Je ne comprends pas pourquoi vous ne voulez pas définir la $HOMEvariable d'environnement car cela résout exactement ce que vous demandez.

cd ~ne signifie pas changer le répertoire racine , mais changer le répertoire personnel de l'utilisateur , qui est défini par la $HOMEvariable d'environnement.

Solution Quick'n'dirty

Modifiez C:\Program Files (x86)\Git\etc\profileet définissez la $HOMEvariable comme vous le souhaitez (ajoutez-la si elle n'est pas là). Un bon endroit pourrait être par exemple juste après une condition commentée par # Set up USER's home directory. Il doit être au format MinGW, par exemple:

HOME=/c/my/custom/home

Enregistrez-le, ouvrez Git Bash et exécutez cd ~. Vous devriez être dans un répertoire /c/my/custom/homemaintenant.

Tout ce qui accède au profil de l'utilisateur doit aller dans ce répertoire au lieu du profil de votre Windows sur un lecteur réseau.

Remarque: C:\Program Files (x86)\Git\etc\profile est partagé par tous les utilisateurs, donc si la machine est utilisée par plusieurs utilisateurs, c'est une bonne idée de définir $HOMEdynamiquement:

HOME=/c/Users/$USERNAME

Solution plus propre

Définissez la variable d'environnement HOMEdans Windows sur le répertoire de votre choix. Dans ce cas, vous devez le définir au format de chemin Windows (avec des barres obliques inverses, par exemple c:\my\custom\home), Git Bash le chargera et le convertira à son format.

Si vous souhaitez modifier le répertoire de base de tous les utilisateurs de votre machine , définissez-le comme variable d'environnement système , où vous pouvez utiliser par exemple une %USERNAME%variable afin que chaque utilisateur ait son propre répertoire de base, par exemple:

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

Si vous souhaitez modifier le répertoire personnel uniquement pour vous - même , définissez-le comme variable d'environnement utilisateur afin que les autres utilisateurs ne soient pas affectés. Dans ce cas, vous pouvez simplement coder en dur le chemin complet:

HOME=c:\my\custom\home
David Ferenczy Rogožan
la source
3
Merci, je ne trouve pas de variable $ HOME dans mon fichier de profil. J'ai ajouté à la question. S'il vous plaît, jetez un oeil. peut-être ai-je besoin de chercher ailleurs cette variable?
PEWColina
1
Aucun autre fichier dans tout le répertoire n'appelle / définit $ HOME.
PEWColina
1
Alors avez-vous essayé de l'ajouter n'importe où? Par exemple au bas de profile? Juste une note que le contenu de la HOMEvariable doit ressembler à ceci en bash git: /c/some/path.
David Ferenczy Rogožan
6
l'ajout de HOME en haut du fichier de profil a fonctionné. HOME="c://path/to/custom/root/"
PEWColina
3
L'ajout de la variable d'environnement système 'home' a résolu le problème plutôt que de modifier le fichier de profil dans le dossier git
firstpostcommenter
43

Dans mon cas, tout ce que j'avais à faire était d'ajouter la variable User suivante sous Windows:

Nom de la HOME
variable: Valeur de la variable:%USERPROFILE%

Comment définir une variable d'environnement (vous pouvez utiliser la section Variables utilisateur pour le nom d'utilisateur si vous n'êtes pas un administrateur système)

EliandroRibeiro
la source
3
Cela a parfaitement fonctionné pour moi, et est une meilleure solution IMO à la réponse acceptée.
dan_g
2
Cette réponse devrait aller en haut.
user4015990
1
Cela a fonctionné mais pas lors de l'utilisation de plusieurs utilisateurs sur la même machine. J'ai dû ajouter HOME=/c/Users/$USERNAMEau profil.
gonzo
3
Cela devrait être la meilleure réponse. C'est le seul moyen (le seul moyen que j'ai pu trouver) pour que GitBash utilise le répertoire .ssh dans mon dossier utilisateur Windows (C: \ Users \ UserName). Sur mon système, il était par défaut% HOMEDRIVE% (M :). Et bien sûr, cela fonctionnera toujours après la mise à jour vers GitBash!
YanisTheYak
1
Cela fonctionne si vous n'avez pas de jeu de variables $ HOME, mais il semble que l'OP ait défini $ HOME par la politique de l'entreprise. J'ai aussi son problème. Cette réponse ne fonctionne pas dans ce cas (le nouveau paramètre est automatiquement écrasé par la stratégie de l'entreprise).
bitsmack
38

Je partagerais ce que j'ai fait, qui fonctionne non seulement pour Git, mais aussi pour MSYS / MinGW.

La HOMEvariable d'environnement n'est normalement pas définie pour les applications Windows, donc sa création via Windows n'affecte rien d'autre. Depuis les propriétés de l'ordinateur (cliquez avec le bouton droit sur Ordinateur - ou quel que soit son nom - dans l'Explorateur, et sélectionnez Propriétés, ou Panneau de configuration -> Système et sécurité -> Système), choisissez Advanced system settings, puis Environment Variables...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 passé en revue les détails de la création de variables d'environnement précisément parce qu'il est si difficile à trouver.)

Menachem
la source
4
Si vous ne disposez pas d'un accès administrateur pour modifier l'environnement à partir du panneau de configuration, vous devrez émettre la commande suivante,, à rundll32 sysdm.cpl,EditEnvironmentVariables partir de l'invite de commande, ou taper environmentdans le menu Démarrer pour lancer la même commande.
Chris Chiasson
2
Cela a fonctionné pour moi pour définir le répertoire personnel de git-bash. Merci pour la réassurance que vous pouvez définir la variable d'environnement HOME dans Windows, ainsi que des instructions détaillées sur la façon de le faire. Un simple changement pour atteindre mon objectif.
Stephen Hosking
%USERPROFILE%est une bonne valeur pour votre variable d'environnement HOME . Voir ma réponse
EliandroRibeiro
@EliandroRibeiro C'est une possibilité, et selon vos besoins, peut-être une bonne idée. Pour moi, je n'ai pas fait spécifiquement de le faire de cette façon. En partie pour garder les environnements Windows et Unix séparés (pour éviter l'encombrement), et en partie pour avoir my HOME( ~) plus près de l' /arborescence racine . J'ai en fait créé un répertoire C:/homeet je l' utilise. En outre, BTW, le PO a noté que pour lui, le sien %USERPROFILE%est sur un lecteur réseau et terriblement pénible à utiliser comme vous l'avez décrit.
Menachem
1
Oui Menachem, j'apprécie votre précision, mais ce que je voulais faire, c'était simplement les détails du processus, mais insister sur le résultat, ce qui a été confirmé par de nombreuses personnes, dont Stephen Hosking et moi. Autrement dit, pour moi, le résultat final compte, les autres détails sont plus une distraction. J'espère que ça vous va.
xpt
21

Au lieu de modifier le global, profilevous pouvez créer le .bash_profiledans votre $HOMErépertoire 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
dekkard
la source
Oui! .bash_profileest la bonne façon de personnaliser votre environnement, le piratage .profilen'est pas une bonne pratique.
roblogic
1
@ropata "hacking" ~/.profileest très bien. En fait, la documentation le préfère à ~/.bash_profie: "Les fichiers appropriés pour les variables d'environnement qui n'affectent qu'un utilisateur particulier (plutôt que le système dans son ensemble) sont ... ~ / .profile." Et: "Les fichiers de configuration du shell tels que ... ~ / .bash_profile ... sont souvent suggérés pour définir les variables d'environnement. Bien que cela puisse fonctionner sur les shells Bash pour les programmes démarrés à partir du shell, les variables définies dans ces fichiers ne sont pas disponibles par défaut aux programmes démarrés à partir de l'environnement graphique dans une session de bureau. " help.ubuntu.com/community/EnvironmentVariables
Hawkeye Parker
7

1.Cliquez 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.Supprimez la partie "--cd-to-home" du champ "Cible"

Özgür Öztürk
la source
5
ne change pas réellement la $HOMEvariable
roblogic
1
Quelle version de Windows? Il ne semble pas possible d'accéder aux propriétés dans Windows 10.
Peter Mortensen
@PeterMortensen faites un clic droit pour Gitbash SHORTCUT choisissez Propriétés
Özgür Öztürk
4

Donc, $ HOME est ce que je dois modifier. Cependant, je n'ai pas pu trouver où cette variable mythique $ HOME est définie, donc j'ai supposé qu'il s'agissait d'une version système Linux de PATH ou quelque chose. Bref ... **

Répondre

L'ajout de HOME en haut du profilefichier 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
Duncan Jones
la source
2

Alors, $HOMEc'est ce que j'ai besoin de modifier.

Cependant, je n'ai pas pu trouver où cette $HOMEvariable mythique est définie, donc j'ai supposé qu'il s'agissait d'une version système Linux de PATH ou quelque chose du genre.

Git 2.23 (Q3 2019) est assez explicite sur la façon dont HOMEest défini.

Voir commit e12a955 (04 juil.2019 ) par Karsten Blees ( kblees) .
(Fusionné par Junio ​​C Hamano - gitster- in commit fc613d2 , 19 juil.2019 )

mingw: initialiser HOME au démarrage

HOMEl'initialisation était historiquement dupliquée dans de nombreux endroits différents, y compris /etc/profile, des scripts de lancement tels que git-bash.vbset gitk.cmd, et (bien que légèrement cassés) dans le git-wrapper.

Même les projets non liés tels que GitExtensionset TortoiseGitdoivent implémenter la même logique pour pouvoir appeler directement git.

Initialisez HOMEdans le propre code de démarrage de Git afin que nous puissions éventuellement retirer 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);
}
VonC
la source
0

J'ai fait face exactement au même problème. Mon lecteur domestique est mappé sur un lecteur réseau. Aussi

  1. Pas d'accès en écriture au disque d'origine
  2. Pas d'accès en écriture au profil Git bash
  3. 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 HOMEdes variables d'environnement.

rundll32 sysdm.cpl,EditEnvironmentVariables

garg10may
la source
Ceci est juste un raccourci de la console pour accéder à l'éditeur de variables d'environnement
Raúl Salinas-Monteagudo
-1

Je sais que c'est une vieille question, mais c'est le meilleur résultat de google pour "gitbash homedir windows" alors j'ai pensé que j'ajouterais mes résultats.

Peu importe ce que j'ai essayé, je ne pouvais pas faire démarrer git-bash ailleurs que sur mon lecteur réseau, (U :) dans mon cas, chaque opération prend 15 à 20 secondes pour répondre. (Employé à distance sur VPN, lecteur réseau hébergé à l'autre bout du pays)

J'ai essayé de définir les variables HOME et HOMEDIR dans Windows.

J'ai essayé de définir les variables HOME et HOMEDIR dans le fichier etc / profile de l'installation de git.

J'ai essayé de modifier le "Démarrer dans" sur le raccourci git-bash pour qu'il soit C: / user / myusername.

La commande "env" dans le shell git-bash afficherait correctement c: / user / myusername. Mais git-bash commencerait toujours dans U:

Ce qui a finalement résolu le problème pour moi a été de modifier le raccourci git-bash et de supprimer le "--cd-to-home" de la ligne Target.

Je suis sous Windows 10 exécutant la dernière version de Git-for-windows 2.22.0.

grsiepka
la source
1
Salut grsiepka - merci pour votre première contribution à SO. En lisant votre réponse (je la passe en revue), ce qui saute aux yeux, c'est que ce n'est pas tant une réponse qu'une description de ce que vous avez tous essayé qui n'a pas fonctionné;). Imaginez d'autres utilisateurs cherchant une réponse et trouvant cette question - alors ils attendent / veulent que la réponse (acceptée) leur dise comment résoudre leur problème. Une bonne réponse est écrite dans cet esprit. Pouvez-vous modifier votre réponse et la raccourcir? Merci.
Carlo Wood
Aucune des réponses «acceptées» n'a fonctionné pour moi. J'ai posté ce que j'ai fait. Si cela ne vous aide pas, n'hésitez pas à supprimer ma réponse.
grsiepka
-6

Ici vous allez: Ici vous allez: Créez un point de restauration système. Connectez-vous sous un compte administrateur. Supprimez le dossier C: \ SomeUser. Déplacez le dossier c: \ Users \ SomeUser pour qu'il devienne c: \ SomeUser. Ouvrez l'éditeur de registre. Accédez à HKLM \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ ProfileList. Recherchez "ProfileImagePath" jusqu'à ce que vous trouviez celui qui pointe vers c: \ Users \ SomeUser. Modifiez-le pour qu'il pointe vers c: \ SomeUser. Utilisez la restauration du système en cas de problème.

Oz Bar-Shalom
la source
4
Cela déplacera son profil utilisateur Windows. Je ne pense pas que ce soit ce qu'il veut.
David Ferenczy Rogožan
1
Et très probablement, dans une configuration d'entreprise, il pourrait ne pas avoir la permission pour cela.
Menachem le