Zmień lokalizację katalogu ~ w instalacji Git Bash w systemie Windows

138

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
PEWColina
źródło
~reprezentuje twój katalog domowy. Zmiana HOMEzmiennej środowiskowej zmieni miejsce, w którym się pojawi.
Uwaga: HOMEzmienna środowiskowa nie zmienia się tylko tam, gdzie ~wskazuje, ale także wszystko, co uzyskuje dostęp do katalogu domowego użytkownika, powinno tam trafiać.
David Ferenczy Rogožan
~jest tylko skrótem od "katalogu domowego użytkownika", więc gdziekolwiek ~wskazuje, jest katalog domowy użytkownika.
David Ferenczy Rogožan
Tak, nie mogę znaleźć tej zmiennej $ HOME, aby ją ustawić. Powyżej dodałem, jak wygląda mój plik profilu.
PEWColina
Widzę, prawdopodobnie masz inną wersję Gita. Jaką masz wersję? Swoją drogą spróbuj dodać ustawienie HOME na końcu profilu. Ale możliwe, że zostanie nadpisany gdzie indziej.
David Ferenczy Rogožan

Odpowiedzi:

140

Nie rozumiem, dlaczego nie chcesz ustawiać $HOMEzmiennej ś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 $HOMEzmienną środowiskową.

Szybkie i brudne rozwiązanie

Edytuj C:\Program Files (x86)\Git\etc\profilei ustaw $HOMEzmienną 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:

HOME=/c/my/custom/home

Zapisz go, otwórz Git Bash i wykonaj cd ~. Powinieneś być /c/my/custom/hometeraz 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 $HOMEdynamiczne:

HOME=/c/Users/$USERNAME

Czystsze rozwiązanie

Ustaw zmienną środowiskową HOMEw 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:

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

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ę:

HOME=c:\my\custom\home
David Ferenczy Rogožan
źródło
3
Dziękuję, nie mogę znaleźć zmiennej $ HOME w moim pliku profilu. Dodałem do pytania. Proszę spójrz. może muszę szukać gdzie indziej tej zmiennej?
PEWColina
1
Żaden inny plik w całym katalogu nie wywołuje / nie ustawia $ HOME.
PEWColina
1
Więc czy próbowałeś po prostu dodać to gdziekolwiek? Na przykład na dole profile? Tylko uwaga, że zawartość HOMEzmiennej powinna wyglądać w git-bash: /c/some/path.
David Ferenczy Rogožan
6
dodanie HOME na górze pliku profilu zadziałało. HOME="c://path/to/custom/root/"
PEWColina
3
Dodanie zmiennej środowiskowej
``
43

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 )

EliandroRibeiro
źródło
3
U mnie to zadziałało idealnie i jest lepszym rozwiązaniem IMO na zaakceptowaną odpowiedź.
dan_g
2
Ta odpowiedź powinna iść na górę.
user4015990
1
To zadziałało, ale nie podczas korzystania z wielu użytkowników na tym samym komputerze. Musiałem iść z dodaniem HOME=/c/Users/$USERNAMEdo profilu.
gonzo
3
To powinna być najlepsza odpowiedź. To jedyny sposób (jedyny sposób, jaki mogłem znaleźć), aby GitBash używał katalogu .ssh w moim folderze użytkownika Windows (C: \ Users \ UserName). W moim systemie było to domyślnie% HOMEDRIVE% (M :). I oczywiście będzie nadal działać po aktualizacji do GitBash!
YanisTheYak
1
Działa to, jeśli nie masz ustawionej zmiennej $ HOME, ale wygląda na to, że OP ma ustawioną $ HOME przez politykę firmy. Ja też mam jego problem. Ta odpowiedź nie działa w takim przypadku (nowe ustawienie zostanie automatycznie nadpisane przez politykę firmy).
bitsmack
38

Podzielę się tym, co zrobiłem, co działa nie tylko w przypadku Gita, ale także MSYS / MinGW.

HOMEZmienna 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), wybierz Advanced system settings, a następnie Environment Variables...utwórz nowy HOMEi 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).

Menachem
źródło
4
Jeśli nie masz dostępu administratora do zmiany środowiska z panelu sterowania, będziesz musiał wydać następujące polecenie rundll32 sysdm.cpl,EditEnvironmentVariables z wiersza polecenia lub wpisać environmentmenu Start, aby uruchomić to samo polecenie.
Chris Chiasson
2
Pomogło mi to w ustawieniu katalogu domowego dla git-bash. Dziękujemy za zapewnienie, że można ustawić zmienną środowiskową HOME w systemie Windows, a także szczegółowe instrukcje, jak to zrobić. Jedna prosta zmiana, aby osiągnąć mój cel.
Stephen Hosking
%USERPROFILE%jest dobrą wartością dla zmiennej środowiskowej HOME . Zobacz moją odpowiedź
EliandroRibeiro,
@EliandroRibeiro To jest możliwość i w zależności od Twoich potrzeb może to dobry pomysł. Dla siebie specjalnie nie zrobiłem tego w ten sposób. Częściowo po to, aby oddzielić środowiska Windows i uniksopodobne (aby uniknąć bałaganu), a częściowo po to, aby my HOME( ~) było bliżej /drzewa głównego . Właściwie stworzyłem katalog C:/homei 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ś.
Menachem,
1
Tak, Menachem, doceniam twoją precyzję, ale chciałem osiągnąć po prostu szczegóły procesu, ale podkreślić wynik, co zostało potwierdzone przez wiele osób, w tym Stephen Hosking i ja. Oznacza to, że dla mnie liczy się efekt końcowy, inne szczegóły są bardziej rozpraszające. Mam nadzieję, że z tobą wszystko w porządku.
xpt
21

Zamiast modyfikować globalny, profilemożesz utworzyć .bash_profilew swoim domyślnym $HOMEkatalogu (np. C:\Users\WhateverUser\.bash_profile) Następującą zawartość:

export HOME="C:\my\projects\dir"
cd "$HOME" # if you'd like it to be the starting dir of the git shell
dekkard
źródło
Tak! .bash_profileto właściwy sposób dostosowania środowiska, hakowanie .profilenie jest dobrą praktyką.
roblogic
1
@ropata „hacking” ~/.profilejest 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/EnvironmentVariables
Hawkeye Parker
7

1. 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"

Özgür Öztürk
źródło
5
w rzeczywistości nie zmienia $HOMEzmiennej
roblogic
1
Jaka wersja systemu Windows? Wydaje się, że nie można uzyskać dostępu do Właściwości w systemie Windows 10.
Peter Mortensen
@PeterMortensen kliknij prawym przyciskiem myszy, aby Gitbash SHORTCUT wybierz Właściwości
Özgür Öztürk
4

Tak 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 profilepliku zadziałało.

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
źródło
2

Więc $HOMEto muszę zmodyfikować.

Jednak nie mogłem znaleźć, gdzie $HOMEjest ustawiona ta mityczna zmienna, więc założyłem, że jest to wersja PATH dla systemu Linux lub coś w tym rodzaju.

Git 2.23 (Q3 2019) jest dość wyraźny, jak HOMEjest ustawiony.

Zobacz commit e12a955 (04 lipca 2019) autorstwa Karsten Blees ( kblees) .
(Scalone przez Junio ​​C Hamano - gitster- w zatwierdzeniu fc613d2 , 19 lipca 2019)

mingw: inicjalizuj HOME przy starcie

HOMEinicjalizacja była historycznie powielana w wielu różnych miejscach, w tym w /etc/profileskryptach uruchamiania, takich jak git-bash.vbsi gitk.cmd, i (choć nieco uszkodzony) w git-wrapper.

Nawet niepowiązane projekty, takie jak GitExtensionsi, TortoiseGitmuszą zaimplementować tę samą logikę, aby móc bezpośrednio wywoływać git.

Zainicjuj HOMEwe własnym kodzie startowym Git, abyśmy mogli ostatecznie wycofać cały zduplikowany kod inicjujący.

Teraz mingw.c zawiera następujący kod:

/* 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
źródło
0

Miałem dokładnie ten sam problem. Mój dysk domowy zmapowany na dysk sieciowy. Również

  1. Brak dostępu do zapisu na dysku domowym
  2. Brak dostępu do zapisu w profilu Git bash
  3. Brak uprawnień administratora do zmiany zmiennych środowiskowych z panelu sterowania.

Jednak poniżej działałem z wiersza poleceń i mogłem dodawać HOMEzmienne środowiskowe.

rundll32 sysdm.cpl,EditEnvironmentVariables

garg10may
źródło
To jest tylko skrót konsoli umożliwiający dostęp do edytora zmiennych środowiskowych
Raúl Salinas-Monteagudo
-1

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.

grsiepka
źródło
1
Cześć grsiepka - dziękuję za pierwszy wkład w SO. Czytając twoją odpowiedź (przeglądam ją) wyskakuje z tego, że nie jest to odpowiedź, a także opis tego, co wszyscy próbowaliście, ale nie zadziałało;). Wyobraź sobie innych użytkowników, którzy szukają odpowiedzi i znajdują to pytanie - następnie oczekują / chcą (zaakceptowanej) odpowiedzi, która powie im, jak rozwiązać problem. Mając to na uwadze, napisano dobrą odpowiedź. Czy możesz edytować swoją odpowiedź i skrócić ją? Dzięki.
Carlo Wood
Żadna z „zaakceptowanych” odpowiedzi nie pomogła. Opublikowałem, co zrobiłem. Jeśli to nie pomoże, możesz usunąć moją odpowiedź.
grsiepka 22.07.19
-6

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.

Oz Bar-Shalom
źródło
4
Spowoduje to przeniesienie jego profilu użytkownika Windows. Nie sądzę, żeby tego chciał.
David Ferenczy Rogožan
1
I bardzo możliwe, że w ramach korporacji mógłby nie mieć na to pozwolenia.
Menachem