Ändern Sie den Speicherort des Verzeichnisses ~ in einer Windows-Installation von Git Bash

138

Ich bin mir nicht mal sicher, ob ich die richtige Frage stelle. Lassen Sie mich meine Situation erklären:

Hier geht es um Git unter Windows 7.

Mein Unternehmen richtet das Windows-Benutzerverzeichnis auf einem Netzwerklaufwerk ein, nicht auf der lokalen Festplatte (für Sicherungs- und andere Zwecke, die über den Rahmen dieser Frage hinausgehen). Ich kann diese Richtlinie nicht ändern.

Ich KANN jedoch lokale Dateien außerhalb dieses Schemas haben, und so wird mein Apache-Server eingerichtet. Ganz lokal.

Ich habe Git installiert. Es installiert Bash. Wenn ich Bash starte und cd ~(in das Stammverzeichnis wechsle), stelle ich fest, dass es (das Bash-Stammverzeichnis) auf mein Netzwerkbenutzerverzeichnis verweist. Ich möchte, dass es das nicht tut. Ich möchte ~woanders auf meiner Festplatte sein. Ich möchte, dass bei der Ausführung anderer Vorgänge wie der Installation eines Zertifikats, eines SSH-Schlüssels usw. dessen Netzwerkverzeichnisse nicht automatisch verwendet werden.

Ich habe überall vergeblich gesucht und alles, was ich finden kann, bezieht sich auf Antworten, die Aliase, Umleitungen und den Ort beinhalten, auf den $ HOME zeigt. Aber das will ich überhaupt nicht.

Die Frage ist: Kann ich dieses Verzeichnis ändern? Und wenn ja: wie?

UPDATE: Also, $ HOME ist das, was ich ändern muss. Ich konnte jedoch nicht finden, wo diese mythische $ HOME-Variable gesetzt ist, also nahm ich an, dass es sich um eine Linux-Systemversion von PATH oder so handelt. Wie auch immer ...

Ich habe eine "Profil" -Datei unter git/etc. Hier sind die Inhalte (beachten Sie kein $ 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
quelle
~repräsentiert Ihr Home-Verzeichnis. Durch Ändern der HOMEUmgebungsvariablen wird geändert, wohin sie geht.
Nur eine Anmerkung: Die HOMEUmgebungsvariable ändert sich nicht nur dort, wo sie ~zeigt, sondern auch alles, was auf das Home-Verzeichnis des Benutzers zugreift, sollte dort abgelegt werden.
David Ferenczy Rogožan
~ist nur eine Abkürzung für "Home-Verzeichnis ~des Benutzers ". Wo immer darauf hingewiesen wird , befindet sich das Home-Verzeichnis des Benutzers.
David Ferenczy Rogožan
Ja, ich kann diese $ HOME-Variable nicht finden, um sie festzulegen. Oben habe ich hinzugefügt, wie meine Profildatei aussieht.
PEWColina
Ich sehe, Sie haben wahrscheinlich eine andere Version von Git. Welche Version hast du? Übrigens versuchen Sie, die Einstellung von HOME am Ende des Profils hinzuzufügen. Aber es ist möglich, dass es woanders überschrieben wird.
David Ferenczy Rogožan

Antworten:

139

Ich verstehe nicht, warum Sie die $HOMEUmgebungsvariable nicht festlegen möchten, da dies genau das löst, wonach Sie fragen.

cd ~bedeutet nicht, in das Stammverzeichnis zu wechseln , sondern in das Ausgangsverzeichnis des Benutzers , das von der $HOMEUmgebungsvariablen festgelegt wird.

Schnelle Lösung

Bearbeiten Sie C:\Program Files (x86)\Git\etc\profiledie $HOMEVariable und setzen Sie sie auf das, was Sie wollen (fügen Sie sie hinzu, wenn sie nicht vorhanden ist). Ein guter Ort könnte zum Beispiel direkt nach einer von kommentierten Bedingung sein # Set up USER's home directory. Es muss im MinGW-Format vorliegen, zum Beispiel:

HOME=/c/my/custom/home

Speichern Sie es, öffnen Sie Git Bash und führen Sie es aus cd ~. Sie sollten sich /c/my/custom/homejetzt in einem Verzeichnis befinden .

Alles, was auf das Benutzerprofil zugreift, sollte in dieses Verzeichnis anstatt in das Windows-Profil auf einem Netzwerklaufwerk verschoben werden.

Hinweis: C:\Program Files (x86)\Git\etc\profile Wird von allen Benutzern gemeinsam genutzt. Wenn der Computer also von mehreren Benutzern verwendet wird, empfiehlt es sich, Folgendes $HOMEdynamisch festzulegen:

HOME=/c/Users/$USERNAME

Sauberere Lösung

Stellen Sie die Umgebungsvariable HOMEin Windows auf das gewünschte Verzeichnis ein. In diesem Fall müssen Sie es im Windows-Pfadformat festlegen (z. B. mit Backslashes c:\my\custom\home). Git Bash lädt es und konvertiert es in sein Format.

Wenn Sie das Ausgangsverzeichnis für alle Benutzer auf Ihrem Computer ändern möchten , legen Sie es als Systemumgebungsvariable fest , in der Sie beispielsweise eine %USERNAME%Variable verwenden können, damit jeder Benutzer sein eigenes Ausgangsverzeichnis hat, zum Beispiel:

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

Wenn Sie das Ausgangsverzeichnis nur für sich selbst ändern möchten , legen Sie es als Benutzerumgebungsvariable fest , damit andere Benutzer nicht betroffen sind. In diesem Fall können Sie einfach den gesamten Pfad fest codieren:

HOME=c:\my\custom\home
David Ferenczy Rogožan
quelle
3
Vielen Dank, ich kann keine $ HOME-Variable in meiner Profildatei finden. Ich habe der Frage hinzugefügt. Bitte sehen Sie sich das an. Vielleicht muss ich woanders nach dieser Variablen suchen?
PEWColina
1
Keine andere Datei im gesamten Verzeichnis ruft $ HOME auf / setzt sie.
PEWColina
1
Haben Sie versucht, es irgendwo hinzuzufügen? Zum Beispiel auf den Grund von profile? Nur ein Hinweis, dass der Inhalt der HOMEVariablen in git-bash so aussehen sollte : /c/some/path.
David Ferenczy Rogožan
6
Das Hinzufügen von HOME oben in der Profildatei hat funktioniert. HOME="c://path/to/custom/root/"
PEWColina
3
Das Hinzufügen der Umgebungsvariablen 'home' des Systems löste das Problem, anstatt die Profildatei im git-Ordner zu
bearbeiten
43

In meinem Fall musste ich unter Windows lediglich die folgende Benutzervariable hinzufügen :

Variablenname: HOME
Variablenwert:%USERPROFILE%

So legen Sie eine Umgebungsvariable fest (Sie können den Abschnitt Benutzervariablen für Benutzername verwenden, wenn Sie kein Systemadministrator sind).

EliandroRibeiro
quelle
3
Dies hat bei mir perfekt funktioniert und ist IMO eine bessere Lösung für die akzeptierte Antwort.
dan_g
2
Diese Antwort sollte nach oben gehen.
user4015990
1
Dies funktionierte jedoch nicht, wenn mehrere Benutzer auf demselben Computer verwendet wurden. Ich musste mit dem Hinzufügen HOME=/c/Users/$USERNAMEzum Profil gehen.
Gonzo
3
Dies sollte die beste Antwort sein. Dies ist die einzige Möglichkeit (die einzige Möglichkeit, die ich finden konnte), GitBash dazu zu bringen, das Verzeichnis .ssh in meinem Windows-Benutzerordner (C: \ Users \ UserName) zu verwenden. Auf meinem System war standardmäßig% HOMEDRIVE% (M :). Und natürlich wird es auch nach dem Update auf GitBash noch funktionieren!
YanisTheYak
1
Dies funktioniert, wenn Sie keine $ HOME-Variable festgelegt haben, es sich jedoch so anhört, als hätte das OP $ HOME gemäß den Unternehmensrichtlinien festgelegt. Ich habe auch sein Problem. Diese Antwort funktioniert in diesem Fall nicht (die neue Einstellung wird automatisch durch die Unternehmensrichtlinie überschrieben).
Bitsmack
38

Ich würde teilen, was ich getan habe, was nicht nur für Git, sondern auch für MSYS / MinGW funktioniert.

Die HOMEUmgebungsvariable ist normalerweise nicht für Windows-Anwendungen festgelegt, sodass das Erstellen über Windows keine Auswirkungen auf andere Elemente hatte. Vom Computer Properties (rechte Maustaste auf Computer - oder was auch immer es genannt wird - in Explorer, und wählen Sie Eigenschaften oder Systemsteuerung -> System und Sicherheit -> System) wählen Advanced system settings, dann Environment Variables...und eine neue erstellen, HOMEund weisen Sie es wo immer du willst.

Wenn Sie keine neuen Umgebungsvariablen erstellen können, funktioniert die andere Antwort weiterhin. (Ich habe die Details zum Erstellen von Umgebungsvariablen genau deshalb durchgearbeitet, weil es so schwer zu finden ist.)

Menachem
quelle
4
Wenn Sie keinen Administratorzugriff haben, um die Umgebung über die Systemsteuerung zu ändern, müssen Sie den folgenden Befehl rundll32 sysdm.cpl,EditEnvironmentVariables an der Eingabeaufforderung eingeben oder environmentin das Startmenü eingeben, um denselben Befehl zu starten.
Chris Chiasson
2
Dies funktionierte für mich beim Einstellen des Home-Verzeichnisses für git-bash. Vielen Dank für die erneute Bestätigung, dass das Festlegen der Umgebungsvariablen HOME in Windows in Ordnung ist, sowie für detaillierte Anweisungen dazu. Eine einfache Änderung, um mein Ziel zu erreichen.
Stephen Hosking
%USERPROFILE%ist ein guter Wert für Ihre HOME- Umgebungsvariable. Siehe meine Antwort
EliandroRibeiro
@EliandroRibeiro Das ist eine Möglichkeit und je nach Ihren Bedürfnissen vielleicht eine gute Idee. Für mich selbst habe ich es ausdrücklich nicht so gemacht. Teilweise, um die Windows- und Unix-ähnlichen Umgebungen getrennt zu halten (um Unordnung zu vermeiden), und teilweise, um my HOME( ~) näher am /Stammbaum zu haben. Ich habe tatsächlich ein Verzeichnis erstellt C:/homeund benutze dieses. Übrigens, das OP stellte fest, dass sich sein %USERPROFILE%Laufwerk auf einem Netzlaufwerk befindet und es schrecklich schmerzhaft ist, es wie von Ihnen beschrieben zu verwenden.
Menachem
1
Ja, Menachem, ich weiß es zu schätzen, dass Sie präzise sind, aber ich wollte nur die Prozessdetails erreichen, aber das Ergebnis hervorheben, was von vielen Menschen, einschließlich Stephen Hosking und mir, bestätigt wurde. Dh für mich ist das Endergebnis wichtig, die anderen Details sind eher eine Ablenkung. Hoffe das ist okay für dich.
xpt
21

Anstatt das globale Verzeichnis zu ändern, können profileSie das .bash_profilein Ihrem Standardverzeichnis $HOME(z. B. C:\Users\WhateverUser\.bash_profile) mit den folgenden Inhalten erstellen :

export HOME="C:\my\projects\dir"
cd "$HOME" # if you'd like it to be the starting dir of the git shell
dekkard
quelle
Ja! .bash_profileist der richtige Weg, um Ihre Umgebung anzupassen. Hacken .profileist keine gute Praxis.
Roblogic
1
@ropata "Hacking" ~/.profileist in Ordnung. Tatsächlich ziehen es die Dokumente vor ~/.bash_profie: "Geeignete Dateien für Umgebungsvariablen, die nur einen bestimmten Benutzer (und nicht das gesamte System) betreffen, sind ... ~ / .profile." Und: "Shell-Konfigurationsdateien wie ... ~ / .bash_profile ... werden häufig zum Festlegen von Umgebungsvariablen empfohlen. Während dies bei Bash-Shells für Programme funktioniert, die über die Shell gestartet wurden, sind in diesen Dateien festgelegte Variablen standardmäßig nicht verfügbar auf Programme, die in einer Desktopsitzung aus der grafischen Umgebung gestartet wurden. " help.ubuntu.com/community/EnvironmentVariables
Hawkeye Parker
7

1. Klicken Sie mit der rechten Maustaste auf die Gitbash-Verknüpfung und wählen Sie Eigenschaften.
2.
Wählen Sie die Registerkarte "Verknüpfung". 3. Geben Sie Ihr Startverzeichnis in das Feld "Start in" ein.
4. Entfernen Sie den Teil "--cd-to-home" aus dem Feld "Ziel"

Özgür Öztürk
quelle
5
ändert die $HOMEVariable nicht wirklich
roblogic
1
Welche Version von Windows? Es scheint nicht möglich zu sein, Eigenschaften in Windows 10 zu erreichen.
Peter Mortensen
@ PeterMortensen Rechtsklick auf Gitbash SHORTCUT wählen Sie Eigenschaften
Özgür Öztürk
4

Also muss ich $ HOME ändern. Ich konnte jedoch nicht finden, wo diese mythische $ HOME-Variable gesetzt ist, also nahm ich an, dass es sich um eine Linux-Systemversion von PATH oder so handelt. Wie auch immer ... **

Antworten

Das Hinzufügen von HOME am Anfang der profileDatei hat funktioniert.

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
quelle
2

Also $HOMEist es das , was ich ändern muss.

Ich konnte jedoch nicht finden, wo diese mythische $HOMEVariable gesetzt ist, also nahm ich an, dass es sich um eine Linux-Systemversion von PATH oder so handelt.

Git 2.23 (Q3 2019) ist ziemlich explizit, wie HOMEeingestellt wird.

Siehe Commit e12a955 (04. Juli 2019) von Karsten Blees ( kblees) .
(Zusammengeführt von Junio ​​C Hamano - gitster- in Commit fc613d2 , 19. Juli 2019)

mingw: initialisiere HOME beim Start

HOMEDie Initialisierung wurde historisch an vielen verschiedenen Stellen dupliziert, einschließlich /etc/profileStartskripten wie git-bash.vbsund gitk.cmdund (obwohl leicht unterbrochen) in der git-wrapper.

Selbst nicht verwandte Projekte wie GitExtensionsund TortoiseGitmüssen dieselbe Logik implementieren, um git direkt aufrufen zu können.

Initialisieren Sie HOMEin Gits eigenem Startcode, damit wir schließlich den gesamten doppelten Initialisierungscode zurückziehen können.

Jetzt enthält mingw.c den folgenden Code:

/* 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
quelle
0

Ich hatte genau das gleiche Problem. Mein Heimlaufwerk ist einem Netzwerklaufwerk zugeordnet. Ebenfalls

  1. Nein Schreibzugriff auf Heimlaufwerk
  2. Kein Schreibzugriff auf das Git-Bash-Profil
  3. Keine Administratorrechte zum Ändern von Umgebungsvariablen über das Control Panel.

Allerdings funktionierte unten über die Kommandozeile und ich konnte HOMEUmgebungsvariablen hinzufügen .

rundll32 sysdm.cpl,EditEnvironmentVariables

garg10may
quelle
Dies ist nur eine Konsolenverknüpfung, um auf den Editor für Umgebungsvariablen zuzugreifen
Raúl Salinas-Monteagudo
-1

Ich weiß, dass dies eine alte Frage ist, aber es ist das beste Google-Ergebnis für "gitbash homedir windows", also dachte ich mir, ich würde meine Ergebnisse hinzufügen.

Egal was ich versucht habe, ich konnte git-bash nirgendwo anders als auf meinem Netzwerklaufwerk starten lassen (U :) in meinem Fall, sodass jeder Vorgang 15 bis 20 Sekunden dauert, um zu antworten. (Remote-Mitarbeiter über VPN, Netzwerklaufwerk auf der anderen Seite des Landes)

Ich habe versucht, die Variablen HOME und HOMEDIR in Windows festzulegen.

Ich habe versucht, die Variablen HOME und HOMEDIR in der Setc / Profil-Datei der Git-Installation festzulegen.

Ich habe versucht, das "Start in" in der Git-Bash-Verknüpfung so zu bearbeiten, dass es C: / user / myusername lautet.

Der Befehl "env" in der git-bash-Shell zeigt das korrekte c: / user / myusername an. Aber Git-Bash würde immer noch in U beginnen:

Was es letztendlich für mich behoben hat, war das Bearbeiten der Git-Bash-Verknüpfung und das Entfernen der "--cd-to-Home" aus der Zielzeile.

Ich verwende Windows 10 mit der neuesten Version von Git-for-Windows 2.22.0.

grsiepka
quelle
1
Hallo grsiepka - danke für deinen ersten Beitrag zu SO. Wenn Sie Ihre Antwort lesen (ich überprüfe sie), fällt auf, dass es sich nicht um eine Antwort handelt, sondern um eine Beschreibung dessen, was Sie alle versucht haben, was nicht funktioniert hat;). Stellen Sie sich vor, andere Benutzer suchen nach einer Antwort und finden diese Frage. Dann erwarten / möchten sie, dass die (akzeptierte) Antwort ihnen sagt, wie sie ihr Problem beheben können. In diesem Sinne wird eine gute Antwort geschrieben. Können Sie Ihre Antwort bearbeiten und verkürzen? Vielen Dank.
Carlo Wood
Keine der "akzeptierten" Antworten hat bei mir funktioniert. Ich habe gepostet, was getan hat. Wenn das nicht hilfreich ist, können Sie meine Antwort entfernen.
Grsiepka
-6

Los geht's: Los geht's: Erstellen Sie einen Systemwiederherstellungspunkt. Melden Sie sich unter einem Administratorkonto an. Löschen Sie den Ordner C: \ SomeUser. Verschieben Sie den Ordner c: \ Users \ SomeUser so, dass er zu c: \ SomeUser wird. Öffnen Sie den Registrierungseditor. Navigieren Sie zu HKLM \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ ProfileList. Suchen Sie nach "ProfileImagePath", bis Sie den finden, der auf c: \ Users \ SomeUser verweist. Ändern Sie es so, dass es auf c: \ SomeUser zeigt. Verwenden Sie die Systemwiederherstellung, falls etwas schief geht.

Oz Bar-Shalom
quelle
4
Dadurch wird sein Windows-Benutzerprofil verschoben. Ich glaube nicht, dass er das will.
David Ferenczy Rogožan
1
Und möglicherweise hat er unter einem Unternehmens-Setup keine Erlaubnis dafür.
Menachem