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 aHOME
variável de ambiente mudará para onde vai.HOME
a 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á.~
é apenas uma abreviação de "diretório inicial do usuário"; portanto, onde quer que~
aponte, existe o diretório inicial do usuário.Respostas:
Não entendo por que você não deseja definir a
$HOME
variá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$HOME
variável de ambiente.Solução Quick'n'dirty
Edite
C:\Program Files (x86)\Git\etc\profile
e defina a$HOME
variá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:Salve, abra o Git Bash e execute
cd ~
. Você deve estar em um diretório/c/my/custom/home
agora.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$HOME
dinamicamente:Solução mais limpa
Defina a variável de ambiente
HOME
no Windows para o diretório que desejar. Nesse caso, você deve configurá-lo no formato de caminho do Windows (com barras invertidas, por exemploc:\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: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:
fonte
profile
? Apenas uma nota que o conteúdo daHOME
variável deve ser semelhante a este em git-bash:/c/some/path
.HOME="c://path/to/custom/root/"
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)
fonte
HOME=/c/Users/$USERNAME
ao perfil.Eu compartilharia o que fiz, que funciona não apenas para o Git, mas também para o MSYS / MinGW.
A
HOME
variá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), escolhaAdvanced system settings
,Environment Variables...
crie um novoHOME
e 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.)
fonte
rundll32 sysdm.cpl,EditEnvironmentVariables
no prompt de comando, ou digitarenvironment
no menu Iniciar para iniciar o mesmo comando.%USERPROFILE%
é um bom valor para sua variável de ambiente HOME . Veja minha respostaHOME
(~
) mais próximo da/
árvore raiz . Na verdade, eu criei um diretórioC:/home
e 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.Em vez de modificar o global,
profile
você pode criar o diretório.bash_profile
padrão$HOME
(por exemploC:\Users\WhateverUser\.bash_profile
) com o seguinte conteúdo:fonte
.bash_profile
é a maneira correta de personalizar seu ambiente, invadir.profile
não é uma boa prática.~/.profile
está 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/EnvironmentVariables1.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"
fonte
$HOME
variávelEntã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
profile
arquivo funcionou.HOME="c://path/to/custom/root/"
.fonte
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)Agora, o mingw.c inclui o seguinte código:
fonte
Eu enfrentei exatamente o mesmo problema. Minha unidade doméstica foi mapeada para uma unidade de rede. Além disso
No entanto, abaixo, trabalhei na linha de comando e pude adicionar
HOME
às variáveis de ambiente.rundll32 sysdm.cpl,EditEnvironmentVariables
fonte
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.
fonte
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.
fonte