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
~
repräsentiert Ihr Home-Verzeichnis. Durch Ändern derHOME
Umgebungsvariablen wird geändert, wohin sie geht.HOME
Umgebungsvariable ändert sich nicht nur dort, wo sie~
zeigt, sondern auch alles, was auf das Home-Verzeichnis des Benutzers zugreift, sollte dort abgelegt werden.~
ist nur eine Abkürzung für "Home-Verzeichnis~
des Benutzers ". Wo immer darauf hingewiesen wird , befindet sich das Home-Verzeichnis des Benutzers.Antworten:
Ich verstehe nicht, warum Sie die
$HOME
Umgebungsvariable 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$HOME
Umgebungsvariablen festgelegt wird.Schnelle Lösung
Bearbeiten Sie
C:\Program Files (x86)\Git\etc\profile
die$HOME
Variable 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:Speichern Sie es, öffnen Sie Git Bash und führen Sie es aus
cd ~
. Sie sollten sich/c/my/custom/home
jetzt 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$HOME
dynamisch festzulegen:Sauberere Lösung
Stellen Sie die Umgebungsvariable
HOME
in Windows auf das gewünschte Verzeichnis ein. In diesem Fall müssen Sie es im Windows-Pfadformat festlegen (z. B. mit Backslashesc:\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: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:
quelle
profile
? Nur ein Hinweis, dass der Inhalt derHOME
Variablen in git-bash so aussehen sollte :/c/some/path
.HOME="c://path/to/custom/root/"
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).
quelle
HOME=/c/Users/$USERNAME
zum Profil gehen.Ich würde teilen, was ich getan habe, was nicht nur für Git, sondern auch für MSYS / MinGW funktioniert.
Die
HOME
Umgebungsvariable 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ählenAdvanced system settings
, dannEnvironment Variables...
und eine neue erstellen,HOME
und 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.)
quelle
rundll32 sysdm.cpl,EditEnvironmentVariables
an der Eingabeaufforderung eingeben oderenvironment
in das Startmenü eingeben, um denselben Befehl zu starten.%USERPROFILE%
ist ein guter Wert für Ihre HOME- Umgebungsvariable. Siehe meine AntwortHOME
(~
) näher am/
Stammbaum zu haben. Ich habe tatsächlich ein Verzeichnis erstelltC:/home
und 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.Anstatt das globale Verzeichnis zu ändern, können
profile
Sie das.bash_profile
in Ihrem Standardverzeichnis$HOME
(z. B.C:\Users\WhateverUser\.bash_profile
) mit den folgenden Inhalten erstellen :quelle
.bash_profile
ist der richtige Weg, um Ihre Umgebung anzupassen. Hacken.profile
ist keine gute Praxis.~/.profile
ist 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/EnvironmentVariables1. 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"
quelle
$HOME
Variable nicht wirklichAlso 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
profile
Datei hat funktioniert.HOME="c://path/to/custom/root/"
.quelle
Git 2.23 (Q3 2019) ist ziemlich explizit, wie
HOME
eingestellt wird.Siehe Commit e12a955 (04. Juli 2019) von Karsten Blees (
kblees
) .(Zusammengeführt von Junio C Hamano -
gitster
- in Commit fc613d2 , 19. Juli 2019)Jetzt enthält mingw.c den folgenden Code:
quelle
Ich hatte genau das gleiche Problem. Mein Heimlaufwerk ist einem Netzwerklaufwerk zugeordnet. Ebenfalls
Allerdings funktionierte unten über die Kommandozeile und ich konnte
HOME
Umgebungsvariablen hinzufügen .rundll32 sysdm.cpl,EditEnvironmentVariables
quelle
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.
quelle
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.
quelle