Alterar a localização do diretório ~ em uma instalação do Git Bash no Windows


138

Eu nem tenho certeza se estou fazendo a pergunta certa. Deixe-me explicar minha situação:

É sobre o Git no Windows 7.

Minha empresa configura o diretório de usuários do Windows em uma unidade de rede, não no disco rígido local (para backup e outros fins além do escopo desta pergunta). Não posso mudar essa política.

Contudo, POSSO ter arquivos locais fora desse esquema e é assim que meu servidor Apache está configurado. Inteiramente local.

Eu instalei o Git. Ele instala o Bash. Quando inicio o Bash e cd ~(mudo para o diretório raiz), percebo que ele (o Bash root) aponta para o diretório de usuários da minha rede. Eu quero que não faça isso. Eu quero ~estar em outro lugar no meu disco rígido. Quero que, quando eu executar outras operações, como instalar um certificado, uma chave SSH, etc., seus padrões não usem automaticamente esse diretório de rede.

Eu procurei em vão em todos os lugares, e tudo o que posso encontrar se refere a respostas que envolvem apelidos, redirecionamentos e o local para o qual $ HOME aponta. Mas não é isso que eu quero.

A pergunta é: posso mudar esse diretório? E se sim: como?

ATUALIZAÇÃO: Então, $ HOME é o que eu preciso modificar. No entanto, não consegui encontrar onde esta mítica variável $ HOME está definida, portanto, presumi que fosse uma versão do PATH no sistema Linux ou algo assim. Enfim ...

Eu tenho um arquivo "perfil" em git/etc. Aqui está o conteúdo (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 seu diretório inicial. Alterar a HOMEvariável de ambiente mudará para onde vai.

Apenas uma observação: HOMEa variável de ambiente não muda apenas para onde ~aponta, mas também tudo o que está acessando o diretório inicial do usuário deve ir para lá.
David Ferenczy Rogožan

~é apenas uma abreviação de "diretório inicial do usuário"; portanto, onde quer que ~aponte, existe o diretório inicial do usuário.
David Ferenczy Rogožan

Sim, não consigo encontrar essa variável $ HOME para defini-la. Acima, adicionei a aparência do meu arquivo de perfil.
PEWColina

Entendo, você provavelmente tem uma versão diferente do Git. Que versão você tem? Entre, tente adicionar a configuração de HOME ao final do perfil. Mas é possível que ele seja substituído em outro lugar.
David Ferenczy Rogožan

Respostas:


140

Não entendo por que você não deseja definir a $HOMEvariável de ambiente, pois isso resolve exatamente o que você está pedindo.

cd ~não significa alteração no diretório raiz , mas alteração no diretório inicial do usuário , que é definido pela $HOMEvariável de ambiente.

Solução Quick'n'dirty

Edite C:\Program Files (x86)\Git\etc\profilee defina a $HOMEvariável como desejar (adicione-a se não estiver lá). Um bom local pode ser, por exemplo, logo após uma condição comentada por # Set up USER's home directory. Ele deve estar no formato MinGW, por exemplo:

HOME=/c/my/custom/home

Salve, abra o Git Bash e execute cd ~. Você deve estar em um diretório /c/my/custom/homeagora.

Tudo o que acessa o perfil do usuário deve entrar nesse diretório, em vez do perfil do Windows em uma unidade de rede.

Nota: C:\Program Files (x86)\Git\etc\profile é compartilhado por todos os usuários; portanto, se a máquina for usada por vários usuários, é uma boa ideia definir $HOMEdinamicamente:

HOME=/c/Users/$USERNAME

Solução mais limpa

Defina a variável de ambiente HOMEno Windows para o diretório que desejar. Nesse caso, você deve configurá-lo no formato de caminho do Windows (com barras invertidas, por exemplo c:\my\custom\home), o Git Bash o carregará e o converterá em seu formato.

Se você deseja alterar o diretório pessoal de todos os usuários em sua máquina , configure-o como uma variável de ambiente do sistema , onde você pode usar, por exemplo, %USERNAME%variável para que cada usuário tenha seu próprio diretório pessoal, por exemplo:

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

Se você deseja alterar o diretório pessoal apenas para si , defina-o como uma variável de ambiente do usuário , para que outros usuários não sejam afetados. Nesse caso, você pode simplesmente codificar o caminho inteiro:

HOME=c:\my\custom\home

3
Obrigado, não consigo encontrar uma variável $ HOME no meu arquivo de perfil. Eu adicionei à pergunta. Por favor dê uma olhada. talvez eu precise procurar em outro lugar essa variável?
PEWColina

1
Nenhum outro arquivo no diretório inteiro chama / define $ HOME.
PEWColina

1
Então você tentou adicioná-lo em qualquer lugar? Por exemplo, na parte inferior de profile? Apenas uma nota que o conteúdo da HOMEvariável deve ser semelhante a este em git-bash: /c/some/path.
David Ferenczy Rogožan 01/09/2015

6
adicionando HOME na parte superior do arquivo de perfil funcionou. HOME="c://path/to/custom/root/"
PEWColina 02/09/2015

3
Variável 'casa' ambiente do sistema adicionando resolveu o problema em vez de editar o arquivo de perfil na pasta git
firstpostcommenter

43

No meu caso, tudo o que eu precisava fazer era adicionar a seguinte variável de usuário no Windows:

Nome da HOME
variável: Valor da variável:%USERPROFILE%

Como definir uma variável de ambiente (você pode usar a seção Variáveis ​​de usuário para nome de usuário se não for um administrador do sistema)


3
Isso funcionou perfeitamente para mim e é uma solução melhor da IMO para a resposta aceita.
dan_g

2
Esta resposta deve ir para o topo.
user4015990

1
Isso funcionou, mas não ao usar vários usuários na mesma máquina. Eu tive que ir adicionando HOME=/c/Users/$USERNAMEao perfil.
gonzo

3
Essa deve ser a resposta principal. É a única maneira (única maneira que eu poderia encontrar) de fazer com que o GitBash use o diretório .ssh na minha pasta de usuário do Windows (C: \ Users \ UserName). No meu sistema, o padrão era% HOMEDRIVE% (M :). E é claro que ainda funcionará depois e será atualizado para o GitBash!
YanisTheYak

1
Isso funciona se você não tiver uma variável $ HOME definida, mas parece que o OP tem $ HOME definido pela política da empresa. Eu também tenho o problema dele. Essa resposta não funciona nesse caso (a nova configuração é substituída automaticamente pela política da empresa).
bitsmack

38

Eu compartilharia o que fiz, que funciona não apenas para o Git, mas também para o MSYS / MinGW.

A HOMEvariável de ambiente não é normalmente definida para aplicativos do Windows, portanto, criá-la através do Windows não afetou mais nada. Nas Propriedades do computador (clique com o botão direito do mouse em Computador - ou qualquer que seja o seu nome - no Explorer, e selecione Propriedades ou Painel de controle -> Sistema e segurança -> Sistema), escolha Advanced system settings, Environment Variables...crie um novo HOMEe atribua-o onde você quiser.

Se você não conseguir criar novas variáveis ​​de ambiente, a outra resposta ainda funcionará. (Analisei os detalhes de como criar variáveis ​​de ambiente precisamente porque é muito difícil encontrá-las.)


4
Se você não tiver acesso de administrador para alterar o ambiente no painel de controle, precisará emitir o seguinte comando, rundll32 sysdm.cpl,EditEnvironmentVariables no prompt de comando, ou digitar environmentno menu Iniciar para iniciar o mesmo comando.
Chris Chiasson

2
Isso funcionou para mim na configuração do diretório inicial do git-bash. Obrigado pela garantia de que não há problema em definir a variável de ambiente HOME no Windows e também instruções detalhadas sobre como fazê-lo. Uma simples mudança para alcançar meu objetivo.
Stephen Hosking

%USERPROFILE%é um bom valor para sua variável de ambiente HOME . Veja minha resposta
EliandroRibeiro

@EliandroRibeiro Essa é uma possibilidade e, dependendo de suas necessidades, talvez seja uma boa ideia. Para mim, especificamente, não fiz dessa maneira. Em parte para manter os ambientes semelhantes a Windows e Unix separados (para evitar confusão) e em parte para ter meu HOME( ~) mais próximo da /árvore raiz . Na verdade, eu criei um diretório C:/homee o uso. Além disso, o OP observou que, para ele, o dele %USERPROFILE%está em uma unidade de rede e muito doloroso de usar, como você descreveu.
Menachem

1
Sim Menachem, eu aprecio que você seja preciso, mas o que eu queria alcançar era simplesmente os detalhes do processo, mas enfatizando o resultado, o que foi confirmado por muitas pessoas, incluindo Stephen Hosking e eu. Ou seja, para mim o resultado final importa, o outro detalhado é mais uma distração. Espero que esteja tudo bem com você.
xpt 29/10/19

21

Em vez de modificar o global, profilevocê pode criar o diretório .bash_profilepadrão $HOME(por exemplo C:\Users\WhateverUser\.bash_profile) com o seguinte conteúdo:

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

Sim! .bash_profileé a maneira correta de personalizar seu ambiente, invadir .profilenão é uma boa prática.
roblogic

1
@ropata "hacking" ~/.profileestá bem. De fato, os documentos preferem ~/.bash_profie: "Arquivos adequados para variáveis ​​de ambiente que afetam apenas um usuário específico (e não o sistema como um todo) são ... ~ / .profile." E: "Arquivos de configuração do shell como ... ~ / .bash_profile ... são frequentemente sugeridos para definir variáveis ​​de ambiente. Embora isso possa funcionar nos shells do Bash para programas iniciados no shell, as variáveis ​​definidas nesses arquivos não estão disponíveis por padrão. para programas iniciados no ambiente gráfico em uma sessão da área de trabalho ". help.ubuntu.com/community/EnvironmentVariables
Hawkeye Parker

7

1.Clique com o botão direito do mouse no atalho do Gitbash, escolha Propriedades
2.Escolha a guia "Atalho" 3. Digite
o diretório inicial no campo "Iniciar em
" 4.Remova "--cdcd para home" parte do campo "Destino"


5
realmente não altera a $HOMEvariável
roblogic

1
Qual versão do Windows? Não parece ser possível chegar a Propriedades no Windows 10.
Peter Mortensen

@PeterMortensen clique com o botão direito do mouse no Gitbash SHORTCUT e escolha Properties
Özgür Öztürk

4

Então, $ HOME é o que eu preciso modificar. No entanto, não consegui encontrar onde esta mítica variável $ HOME está definida, portanto, presumi que fosse uma versão do PATH no sistema Linux ou algo assim. Enfim ... **

Responda

Adicionando HOME na parte superior do profilearquivo funcionou.

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

Então, $HOMEé o que eu preciso modificar.

No entanto, não consegui encontrar onde essa $HOMEvariável mítica está definida, portanto, presumi que fosse uma versão do PATH no sistema Linux ou algo assim.

O Git 2.23 (terceiro trimestre de 2019) é bastante explícito sobre como HOMEé definido.

Veja commit e12a955 (04 Jul 2019) por Karsten Blees ( kblees) .
(Incorporado por Junio ​​C Hamano - gitster- in commit fc613d2 , 19 de jul de 2019)

mingw: inicialize HOME na inicialização

HOMEa inicialização foi historicamente duplicada em muitos lugares diferentes, incluindo /etc/profilescripts de lançamento como git-bash.vbse gitk.cmd, e (embora ligeiramente quebrado) no git-wrapper.

Mesmo projetos não relacionados como GitExtensionse TortoiseGitprecisam implementar a mesma lógica para poder chamar o git diretamente.

Inicialize HOMEno próprio código de inicialização do Git, para que possamos aposentar todo o código de inicialização duplicado.

Agora, o mingw.c inclui o seguinte 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);
}

0

Eu enfrentei exatamente o mesmo problema. Minha unidade doméstica foi mapeada para uma unidade de rede. Além disso

  1. Não há acesso de gravação à unidade doméstica
  2. Sem acesso de gravação ao perfil do Git bash
  3. Não há direitos de administrador para alterar variáveis ​​de ambiente no painel de controle.

No entanto, abaixo, trabalhei na linha de comando e pude adicionar HOMEàs variáveis ​​de ambiente.

rundll32 sysdm.cpl,EditEnvironmentVariables


Este é apenas um atalho console para acessar o editor de variável de ambiente
Raúl Salinas-Monteagudo

-1

Eu sei que essa é uma pergunta antiga, mas é o principal resultado do google para "gitbash homedir windows", então achei que eu adicionaria minhas descobertas.

Não importa o que eu tentei, não consegui que o git-bash iniciasse em qualquer lugar, exceto na minha unidade de rede, (U :) no meu caso, fazendo com que todas as operações levem 15-20 segundos para responder. (Funcionário remoto na VPN, unidade de rede hospedada no outro lado do país)

Tentei definir variáveis ​​HOME e HOMEDIR no Windows.

Tentei definir as variáveis ​​HOME e HOMEDIR no arquivo etc / profile da instalação do git.

Tentei editar o "Start in" no atalho do git-bash para ser C: / user / myusername.

O comando "env" dentro do shell git-bash mostraria c: / user / myusername correto. Mas o git-bash ainda começaria em U:

O que finalmente o corrigiu foi editar o atalho do git-bash e remover o "--cd-to-home" da linha Target.

Estou no Windows 10 executando a versão mais recente do Git-for-windows 2.22.0.


1
Olá, grsiepka - obrigado por sua primeira contribuição para o SO. Lendo sua resposta (estou revendo), o que se destaca é que não é tanto uma resposta, mas também uma descrição do que você tentou e que não funcionou;). Imagine outros usuários procurando uma resposta e encontrando essa pergunta - então eles esperam / querem a resposta (aceita) para lhes dizer como resolver o problema. Uma boa resposta é escrita com isso em mente. Você pode editar sua resposta e diminuí-la? Obrigado.
Carlo Wood

Nenhuma das respostas "aceitas" funcionou para mim. Eu postei o que fez. Se isso não for útil, sinta-se à vontade para remover minha resposta.
grsiepka

-6

Aqui você vai: Aqui você vai: Crie um ponto de restauração do sistema. Faça logon em uma conta de administrador. Exclua a pasta C: \ SomeUser. Mova a pasta c: \ Users \ SomeUser para que ela se torne c: \ SomeUser. Abra o editor do registro. Navegue para HKLM \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ ProfileList. Procure por "ProfileImagePath" até encontrar o que aponta para c: \ Users \ SomeUser. Modifique-o para que aponte para c: \ SomeUser. Use a Restauração do sistema, caso algo dê errado.


4
Isso moverá o perfil de usuário do Windows. Eu não acho que é isso que ele quer.
David Ferenczy Rogožan

1
E muito possivelmente, em uma configuração corporativa, ele pode não ter permissão para isso.
Menachem 11/01
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.