Cambia la posizione della directory ~ in un'installazione Windows di Git Bash


138

Non sono nemmeno sicuro di porre la domanda giusta. Lasciami spiegare la mia situazione:

Si tratta di Git su Windows 7.

La mia azienda imposta la directory utente di Windows su un'unità di rete, non sul disco rigido locale (per il backup e altri scopi oltre l'ambito di questa domanda). Non posso cambiare questa politica.

POSSO comunque avere file locali al di fuori di quello schema ed è così che è impostato il mio server Apache. Interamente locale.

Ho installato Git. Installa Bash. Quando accendo Bash e cd ~(passaggio alla directory principale) scopro che (la radice Bash) punta alla mia directory utente di rete. Voglio che non lo faccia. Voglio ~essere altrove sul mio disco rigido. Lo voglio in modo che quando eseguo altre operazioni come l'installazione di un certificato, una chiave SSH, ecc. Le sue impostazioni predefinite non utilizzino automaticamente quella directory di rete.

Ho cercato invano ovunque e tutto ciò che posso trovare si riferisce a risposte che coinvolgono alias, reindirizzamento e la posizione a cui punta $ HOME. Ma non è affatto quello che voglio.

La domanda è: posso cambiare quella directory? E se sì: come?

AGGIORNAMENTO: $ HOME è ciò che devo modificare. Tuttavia non sono stato in grado di trovare dove è impostata questa mitica variabile $ HOME, quindi ho pensato che fosse una versione del sistema Linux di PATH o qualcosa del genere. Comunque ...

Ho un file "profilo" sotto git/etc. Ecco i contenuti (avviso 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

~rappresenta la tua home directory. La modifica della HOMEvariabile di ambiente cambierà dove va.

Solo una nota: HOMEla variabile d'ambiente non cambia solo dove ~punta, ma anche tutto ciò che accede alla home directory dell'utente dovrebbe andare lì.
David Ferenczy Rogožan,

~è solo una scorciatoia per "home directory dell'utente", quindi ovunque ~punti, c'è la home directory dell'utente.
David Ferenczy Rogožan,

Sì, non riesco a trovare questa variabile $ HOME per impostarla. Sopra ho aggiunto l'aspetto del mio file di profilo.
PEWColina,

Vedo, probabilmente hai una versione diversa di Git. Quale versione hai? A proposito, prova ad aggiungere l'impostazione di HOME alla fine del profilo. Ma è possibile che venga sovrascritto altrove.
David Ferenczy Rogožan,

Risposte:


140

Non capisco, perché non vuoi impostare la $HOMEvariabile d'ambiente poiché risolve esattamente quello che stai chiedendo.

cd ~non significa passare alla directory principale , ma passare alla home directory dell'utente , che è impostata dalla $HOMEvariabile d'ambiente.

Soluzione Quick'n'dirty

Modifica C:\Program Files (x86)\Git\etc\profilee imposta la $HOMEvariabile come preferisci (aggiungila se non è presente). Un buon posto potrebbe essere ad esempio subito dopo una condizione commentata da # Set up USER's home directory. Deve essere nel formato MinGW, ad esempio:

HOME=/c/my/custom/home

Salvalo, apri Git Bash ed eseguilo cd ~. Dovresti essere in una directory /c/my/custom/homeora.

Tutto ciò che accede al profilo dell'utente dovrebbe andare in questa directory anziché nel profilo di Windows su un'unità di rete.

Nota: C:\Program Files (x86)\Git\etc\profile è condiviso da tutti gli utenti, quindi se la macchina è utilizzata da più utenti, è una buona idea impostare $HOMEdinamicamente:

HOME=/c/Users/$USERNAME

Soluzione più pulita

Impostare la variabile di ambiente HOMEin Windows sulla directory desiderata. In questo caso, devi impostarlo nel formato del percorso di Windows (con barre rovesciate, ad esempio c:\my\custom\home), Git Bash lo caricherà e lo convertirà nel suo formato.

Se si desidera modificare la home directory per tutti gli utenti sulla propria macchina , impostarla come variabile di ambiente di sistema , dove è possibile utilizzare ad esempio la %USERNAME%variabile in modo che ogni utente disponga della propria home directory, ad esempio:

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

Se vuoi cambiare la home directory solo per te stesso , impostala come variabile di ambiente utente , in modo che gli altri utenti non siano interessati. In questo caso, puoi semplicemente codificare l'intero percorso:

HOME=c:\my\custom\home

3
Grazie, non riesco a trovare una variabile $ HOME nel mio file di profilo. Ho aggiunto alla domanda. Per favore dai un'occhiata. forse ho bisogno di cercare altrove quella variabile?
PEWColina,

1
Nessun altro file nell'intera directory chiama / imposta $ HOME.
PEWColina,

1
Quindi hai provato ad aggiungerlo ovunque? Ad esempio fino alla fine di profile? Solo una nota che il contenuto della HOMEvariabile dovrebbe apparire così in git-bash: /c/some/path.
David Ferenczy Rogožan,

6
l'aggiunta di HOME nella parte superiore del file del profilo ha funzionato. HOME="c://path/to/custom/root/"
PEWColina,

3
L'aggiunta della variabile di ambiente di sistema "home" ha risolto il problema anziché modificare il file del profilo nella cartella git
firstpostcommenter,

43

Nel mio caso, tutto quello che dovevo fare era aggiungere la seguente variabile utente su Windows:

Nome della HOME
variabile: valore della variabile:%USERPROFILE%

Come impostare una variabile di ambiente (è possibile utilizzare le variabili utente per la sezione nome utente se non si è un amministratore di sistema)


3
Questo ha funzionato perfettamente per me ed è una soluzione migliore IMO alla risposta accettata.
dan_g

2
Questa risposta dovrebbe andare in cima.
user4015990

1
Funzionava ma non quando si utilizzavano più utenti sulla stessa macchina. Ho dovuto andare con l'aggiunta HOME=/c/Users/$USERNAMEal profilo.
bizzarri il

3
Questa dovrebbe essere la risposta migliore. È l'unico modo (l'unico modo in cui ho potuto trovare) per ottenere GitBash per utilizzare la directory .ssh nella mia cartella utente di Windows (C: \ Users \ UserName). Sul mio sistema il valore predefinito era% HOMEDRIVE% (M :). E ovviamente funzionerà ancora dopo e si aggiorna a GitBash!
YanisTheYak

1
Funziona se non hai impostato la variabile $ HOME, ma sembra che l'OP abbia $ HOME impostato dalla politica aziendale. Anch'io ho il suo problema. Questa risposta non funziona in quel caso (la nuova impostazione viene automaticamente sovrascritta dalla politica aziendale).
bitsmack

38

Condividerei ciò che ho fatto, che funziona non solo per Git, ma anche per MSYS / MinGW.

La HOMEvariabile d'ambiente non è normalmente impostata per le applicazioni Windows, quindi la sua creazione tramite Windows non ha influito su nient'altro. Da Proprietà del computer (fare clic con il tasto destro su Computer - o come si chiama - in Esplora risorse, selezionare Proprietà o Pannello di controllo -> Sistema e sicurezza -> Sistema), scegliere Advanced system settings, quindi Environment Variables...crearne uno nuovo HOMEe assegnarlo dove vuoi tu.

Se non riesci a creare nuove variabili d'ambiente, l'altra risposta funzionerà comunque. (Ho esaminato i dettagli su come creare variabili di ambiente proprio perché è così difficile da trovare.)


4
Se non si dispone dell'accesso di amministratore per modificare l'ambiente dal pannello di controllo, sarà necessario emettere il comando seguente rundll32 sysdm.cpl,EditEnvironmentVariables , dal prompt dei comandi o digitare environmentil menu di avvio per avviare lo stesso comando.
Chris Chiasson,

2
Questo ha funzionato per me per impostare la home directory per git-bash. Grazie per la rassicurazione che è OK impostare la variabile di ambiente HOME in Windows e anche istruzioni dettagliate su come farlo. Un semplice cambiamento per raggiungere il mio obiettivo.
Stephen Hosking,

%USERPROFILE%è un buon valore per la tua variabile d'ambiente HOME . Vedi la mia risposta
EliandroRibeiro il

@EliandroRibeiro Questa è una possibilità e, a seconda delle tue esigenze, forse una buona idea. Per quanto mi riguarda, in particolare non l' ho fatto in quel modo. In parte per mantenere separati gli ambienti Windows e Unix (per evitare disordine) e in parte per avere il mio HOME( ~) più vicino /all'albero della radice . In realtà ho creato una directory C:/homee la uso. Inoltre, l'OP ha notato che per lui %USERPROFILE%è su un'unità di rete e terribilmente doloroso da usare come hai descritto.
Menachem,

1
Sì, Menachem, apprezzo il tuo essere preciso, ma quello che volevo ottenere era semplicemente i dettagli del processo, ma sottolineare il risultato, che è stato confermato da molte persone tra cui Stephen Hosking e me. Cioè, per me il risultato finale conta, l'altro dettagliato è più una distrazione. Spero che vada bene per te.
XXpt

21

Invece di modificare il globale profileè possibile creare il .bash_profilenella $HOMEdirectory predefinita (ad esempio C:\Users\WhateverUser\.bash_profile) con i seguenti contenuti:

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

Sì! .bash_profileè il modo corretto di personalizzare l'ambiente, l'hacking .profilenon è una buona pratica.
roblogic

1
@ropata "l'hacking" ~/.profileva bene. In effetti, i documenti lo preferiscono rispetto a ~/.bash_profie: "I file adatti per le variabili di ambiente che riguardano solo un determinato utente (piuttosto che l'intero sistema) sono ... ~ / .profile." E: "I file di configurazione della shell come ... ~ / .bash_profile ... sono spesso suggeriti per l'impostazione delle variabili di ambiente. Sebbene ciò possa funzionare su shell Bash per programmi avviati dalla shell, le variabili impostate in tali file non sono disponibili per impostazione predefinita ai programmi avviati dall'ambiente grafico in una sessione desktop ". help.ubuntu.com/community/EnvironmentVariables
Hawkeye Parker

7

1.Fare clic con il tasto destro del mouse sul collegamento Gitbash scegliere Proprietà 2.Selezionare la
scheda "Collegamento"
3. Digitare la directory iniziale nel campo "Inizia nel"
4. Rimuovere "--cd-to-home" dal campo "Destinazione"


5
in realtà non cambia la $HOMEvariabile
roblogic del

1
Quale versione di Windows? Non sembra possibile accedere a Proprietà in Windows 10.
Peter Mortensen,

@PeterMortensen fare clic con il tasto destro del mouse su Gitbash SHORTCUT scegliere Proprietà
Özgür Öztürk

4

Quindi, $ HOME è ciò che devo modificare. Tuttavia non sono stato in grado di trovare dove è impostata questa mitica variabile $ HOME, quindi ho pensato che fosse una versione del sistema Linux di PATH o qualcosa del genere. Comunque ... **

Risposta

L'aggiunta di HOME nella parte superiore del profilefile ha funzionato.

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

2

Quindi, $HOMEè quello che devo modificare.

Tuttavia non sono stato in grado di trovare dove $HOMEè impostata questa mitica variabile, quindi ho pensato che fosse una versione di PATH del sistema Linux o qualcosa del genere.

Git 2.23 (Q3 2019) è abbastanza esplicito su come HOMEè impostato.

Vedi commit e12a955 (04 lug 2019) di Karsten Blees ( kblees) .
(Unito da Junio ​​C Hamano - gitster- in commit fc613d2 , 19 lug 2019)

mingw: inizializza HOME all'avvio

HOMEl'inizializzazione è stata storicamente duplicata in molti luoghi diversi, tra cui /etc/profilescript di lancio come git-bash.vbse gitk.cmde (anche se leggermente interrotti) nel file git-wrapper.

Anche progetti non correlati come GitExtensionse TortoiseGitdevono implementare la stessa logica per poter chiamare git direttamente.

Inizializza HOMEnel codice di avvio di Git in modo da poter eventualmente ritirare tutto il codice di inizializzazione duplicato.

Ora, mingw.c include il seguente codice:

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

0

Ho affrontato esattamente lo stesso problema. La mia unità domestica mappata su un'unità di rete. Anche

  1. Nessun accesso in scrittura all'unità principale
  2. Nessun accesso in scrittura al profilo Git bash
  3. Nessun diritto di amministratore per modificare le variabili di ambiente dal pannello di controllo.

Comunque sotto ha funzionato dalla riga di comando e sono stato in grado di aggiungere HOMEvariabili d'ambiente.

rundll32 sysdm.cpl,EditEnvironmentVariables


Questa è solo una scorciatoia da console per accedere all'editor delle variabili di ambiente
Raúl Salinas-Monteagudo,

-1

So che questa è una vecchia domanda, ma è il miglior risultato di Google per "gitbash homedir windows", quindi ho pensato di aggiungere i miei risultati.

Indipendentemente da ciò che ho provato, non sono riuscito a far partire git-bash da nessuna parte tranne il mio drive di rete, (U :) nel mio caso facendo in modo che ogni operazione impieghi 15-20 secondi per rispondere. (Impiegato remoto su VPN, unità di rete ospitata dall'altra parte del paese)

Ho provato a impostare le variabili HOME e HOMEDIR in Windows.

Ho provato a impostare le variabili HOME e HOMEDIR nel fileetc / profile dell'installazione git.

Ho provato a modificare "Start in" sul collegamento git-bash per essere C: / user / myusername.

Il comando "env" all'interno della shell git-bash mostrerebbe corretto c: / user / myusername. Ma git-bash inizierebbe comunque in U:

Ciò che alla fine l'ho risolto per me è stato modificare il collegamento git-bash e rimuovere "--cd-to-home" dalla linea Target.

Sono su Windows 10 con l'ultima versione di Git-for-windows 2.22.0.


1
Ciao grsiepka, grazie per il tuo primo contributo a SO. Leggendo la tua risposta (la sto rivedendo) ciò che salta fuori è che non è tanto una risposta ma anche una descrizione di ciò che hai provato e che non ha funzionato;). Immagina che altri utenti stiano cercando una risposta e trovino questa domanda, quindi si aspettano / vogliono che la risposta (accettata) dica loro come risolvere il loro problema. Una buona risposta è scritta con questo in mente. Puoi modificare la tua risposta e renderla più breve? Grazie.
Carlo Wood,

Nessuna delle risposte "accettate" ha funzionato per me. Ho pubblicato quello che ha fatto. In caso contrario, rimuovi la mia risposta.
grsiepka,

-6

Ecco qui: Ecco qui: Crea un punto di ripristino del sistema. Accedi con un account amministratore. Elimina la cartella C: \ SomeUser. Spostare la cartella c: \ Users \ SomeUser in modo che diventi c: \ SomeUser. Apri l'editor del registro. Passare a HKLM \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ ProfileList. Cerca "ProfileImagePath" fino a trovare quello che punta a c: \ Users \ SomeUser. Modificalo in modo che punti a c: \ SomeUser. Utilizzare Ripristino configurazione di sistema in caso di problemi.


4
Questo sposterà il suo profilo utente di Windows. Non penso sia quello che vuole.
David Ferenczy Rogožan,

1
E molto probabilmente, in una configurazione aziendale, potrebbe non avere il permesso per questo.
Menachem,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.