Nie jestem nawet pewien, czy zadaję właściwe pytanie. Pozwól mi wyjaśnić moją sytuację:
Chodzi o Git w systemie Windows 7.
Moja firma konfiguruje katalog użytkownika Windows na dysku sieciowym, a nie na lokalnym dysku twardym (do tworzenia kopii zapasowych i innych celów poza zakresem tego pytania). Nie mogę zmienić tej polityki.
MOGĘ jednak mieć pliki lokalne poza tym schematem i tak jest skonfigurowany mój serwer Apache. Całkowicie lokalnie.
Zainstalowałem Git. Instaluje Bash. Kiedy uruchamiam Bash i cd ~
( przechodzę do katalogu głównego) stwierdzam, że (root Bash) wskazuje na mój sieciowy katalog użytkownika. Chcę, żeby tego nie robił. Chcę ~
być gdzie indziej na moim dysku twardym. Chcę, aby podczas wykonywania innych operacji, takich jak instalacja certyfikatu, klucza SSH itp., Jego ustawienia domyślne nie używały automatycznie tego katalogu sieciowego.
Szukałem na próżno wszędzie i wszystko, co mogę znaleźć, odnosi się do odpowiedzi, które obejmują aliasy, przekierowanie i lokalizację, na którą wskazuje $ HOME. Ale wcale tego nie chcę.
Pytanie brzmi: czy mogę zmienić ten katalog? A jeśli tak: jak?
UPDATE: Więc $ HOME jest tym, co muszę zmodyfikować. Jednak nie mogłem znaleźć, gdzie jest ustawiona ta mityczna zmienna $ HOME, więc założyłem, że jest to wersja PATH dla systemu Linux lub coś w tym rodzaju. W każdym razie ...
Mam pod plikiem „profil” git/etc
. Oto zawartość (uwaga nr $ 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
~
reprezentuje twój katalog domowy. ZmianaHOME
zmiennej środowiskowej zmieni miejsce, w którym się pojawi.HOME
zmienna środowiskowa nie zmienia się tylko tam, gdzie~
wskazuje, ale także wszystko, co uzyskuje dostęp do katalogu domowego użytkownika, powinno tam trafiać.~
jest tylko skrótem od "katalogu domowego użytkownika", więc gdziekolwiek~
wskazuje, jest katalog domowy użytkownika.Odpowiedzi:
Nie rozumiem, dlaczego nie chcesz ustawiać
$HOME
zmiennej środowiskowej, skoro to rozwiązuje dokładnie to, o co prosisz.cd ~
nie oznacza zmiany w katalogu głównym , ale przejście do katalogu domowego użytkownika , który jest ustawiany przez$HOME
zmienną środowiskową.Szybkie i brudne rozwiązanie
Edytuj
C:\Program Files (x86)\Git\etc\profile
i ustaw$HOME
zmienną na cokolwiek chcesz (dodaj ją, jeśli jej tam nie ma). Dobre miejsce mogłoby być na przykład zaraz po warunku skomentowanym przez# Set up USER's home directory
. Musi być w formacie MinGW, na przykład:Zapisz go, otwórz Git Bash i wykonaj
cd ~
. Powinieneś być/c/my/custom/home
teraz w katalogu .Wszystko, co uzyskuje dostęp do profilu użytkownika, powinno trafiać do tego katalogu zamiast do profilu systemu Windows na dysku sieciowym.
Uwaga:
C:\Program Files (x86)\Git\etc\profile
jest współdzielone przez wszystkich użytkowników, więc jeśli maszyna jest używana przez wielu użytkowników, dobrym pomysłem jest ustawienie$HOME
dynamiczne:Czystsze rozwiązanie
Ustaw zmienną środowiskową
HOME
w systemie Windows na dowolny katalog. W takim przypadku musisz ustawić go w formacie ścieżki Windows (z odwrotnymi ukośnikami, np.c:\my\custom\home
), Git Bash załaduje go i przekonwertuje do jego formatu.Jeśli chcesz zmienić katalog domowy dla wszystkich użytkowników na swoim komputerze , ustaw go jako systemową zmienną środowiskową , w której możesz użyć na przykład
%USERNAME%
zmiennej, aby każdy użytkownik miał swój własny katalog domowy, na przykład:Jeśli chcesz zmienić katalog domowy tylko dla siebie , ustaw go jako zmienną środowiskową użytkownika , aby nie miało to wpływu na innych użytkowników. W takim przypadku możesz po prostu zakodować całą ścieżkę:
źródło
profile
? Tylko uwaga, że zawartośćHOME
zmiennej powinna wyglądać w git-bash:/c/some/path
.HOME="c://path/to/custom/root/"
W moim przypadku wszystko, co musiałem zrobić, to dodać następującą zmienną użytkownika w systemie Windows:
Nazwa
HOME
zmiennej: Wartość zmiennej:
%USERPROFILE%
Jak ustawić zmienną środowiskową ( jeśli nie jesteś administratorem systemu, możesz użyć zmiennych użytkownika dla sekcji nazwy użytkownika )
źródło
HOME=/c/Users/$USERNAME
do profilu.Podzielę się tym, co zrobiłem, co działa nie tylko w przypadku Gita, ale także MSYS / MinGW.
HOME
Zmienna nie jest zwykle ustawiana dla aplikacji Windows, więc tworząc go poprzez Windows nie miała wpływu na cokolwiek innego. We Właściwościach komputera (kliknij prawym przyciskiem myszy Komputer - lub jakkolwiek to się nazywa - w Eksploratorze i wybierz Właściwości lub Panel sterowania -> System i zabezpieczenia -> System), wybierzAdvanced system settings
, a następnieEnvironment Variables...
utwórz nowyHOME
i przypisz go gdziekolwiek chcesz.Jeśli nie możesz utworzyć nowych zmiennych środowiskowych, druga odpowiedź będzie nadal działać. (Omówiłem szczegóły, jak tworzyć zmienne środowiskowe właśnie dlatego, że jest to tak trudne do znalezienia).
źródło
rundll32 sysdm.cpl,EditEnvironmentVariables
z wiersza polecenia lub wpisaćenvironment
menu Start, aby uruchomić to samo polecenie.%USERPROFILE%
jest dobrą wartością dla zmiennej środowiskowej HOME . Zobacz moją odpowiedźHOME
(~
) było bliżej/
drzewa głównego . Właściwie stworzyłem katalogC:/home
i używam go. Poza tym, przy okazji, OP zauważył, że dla niego jego%USERPROFILE%
jest na dysku sieciowym i jest strasznie bolesny w użyciu, jak opisałeś.Zamiast modyfikować globalny,
profile
możesz utworzyć.bash_profile
w swoim domyślnym$HOME
katalogu (np.C:\Users\WhateverUser\.bash_profile
) Następującą zawartość:źródło
.bash_profile
to właściwy sposób dostosowania środowiska, hakowanie.profile
nie jest dobrą praktyką.~/.profile
jest w porządku. W rzeczywistości dokumentacja woli to od nich~/.bash_profie
: „Odpowiednie pliki dla zmiennych środowiskowych, które mają wpływ tylko na konkretnego użytkownika (a nie na system jako całość), to ... ~ / .profile”. Oraz: „Pliki konfiguracyjne powłoki, takie jak… ~ / .bash_profile… są często sugerowane do ustawiania zmiennych środowiskowych. Chociaż może to działać w powłokach Bash dla programów uruchamianych z powłoki, zmienne ustawione w tych plikach nie są domyślnie dostępne do programów uruchamianych ze środowiska graficznego w sesji pulpitu ”. help.ubuntu.com/community/EnvironmentVariables1. Kliknij prawym przyciskiem myszy na skrót Gitbash wybierz Właściwości 2. Wybierz
zakładkę "Skrót"
3. Wpisz katalog startowy w polu "Start w"
4. Usuń część "--cd-to-home" z pola "Cel"
źródło
$HOME
zmiennejTak więc $ HOME jest tym, co muszę zmodyfikować. Jednak nie mogłem znaleźć, gdzie jest ustawiona ta mityczna zmienna $ HOME, więc założyłem, że jest to wersja PATH dla systemu Linux lub coś w tym rodzaju. W każdym razie ... **
Odpowiedź
Dodanie HOME na początku
profile
pliku zadziałało.HOME="c://path/to/custom/root/"
.źródło
Git 2.23 (Q3 2019) jest dość wyraźny, jak
HOME
jest ustawiony.Zobacz commit e12a955 (04 lipca 2019) autorstwa Karsten Blees (
kblees
) .(Scalone przez Junio C Hamano -
gitster
- w zatwierdzeniu fc613d2 , 19 lipca 2019)Teraz mingw.c zawiera następujący kod:
źródło
Miałem dokładnie ten sam problem. Mój dysk domowy zmapowany na dysk sieciowy. Również
Jednak poniżej działałem z wiersza poleceń i mogłem dodawać
HOME
zmienne środowiskowe.rundll32 sysdm.cpl,EditEnvironmentVariables
źródło
Wiem, że to stare pytanie, ale jest to najlepszy wynik Google dla „okien gitbash homedir”, więc pomyślałem, że dodam swoje wyniki.
Bez względu na to, co próbowałem, nie mogłem uruchomić git-bash w dowolnym miejscu poza moim dyskiem sieciowym, (U :) w moim przypadku każda operacja zajmuje 15-20 sekund, aby odpowiedzieć. (Zdalny pracownik na VPN, dysk sieciowy hostowany po drugiej stronie kraju)
Próbowałem ustawić zmienne HOME i HOMEDIR w oknach.
Próbowałem ustawić zmienne HOME i HOMEDIR w pliku instalacyjnym git'setc / profile.
Próbowałem edytować „Rozpocznij w” w skrócie git-bash tak, aby był C: / user / myusername.
Polecenie "env" wewnątrz powłoki git-bash pokazałoby poprawne c: / user / myusername. Ale git-bash nadal zaczynałby się w U:
Ostatecznie naprawiło to dla mnie edytowanie skrótu git-bash i usunięcie „--cd-to-home” z wiersza Target.
Korzystam z systemu Windows 10 z najnowszą wersją Git-for-Windows 2.22.0.
źródło
Proszę bardzo: Proszę bardzo: Utwórz punkt przywracania systemu. Zaloguj się na koncie administratora. Usuń folder C: \ SomeUser. Przenieś folder c: \ Users \ SomeUser, aby stał się c: \ SomeUser. Otwórz edytor rejestru. Przejdź do HKLM \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ ProfileList. Wyszukaj „ProfileImagePath”, aż znajdziesz ten, który wskazuje na c: \ Users \ SomeUser. Zmodyfikuj go tak, aby wskazywał na c: \ SomeUser. Użyj Przywracania systemu na wypadek, gdyby coś poszło nie tak.
źródło