Saya bahkan tidak yakin menanyakan pertanyaan yang benar. Izinkan saya menjelaskan situasi saya:
Ini tentang Git di Windows 7.
Perusahaan saya menyiapkan direktori pengguna Windows di drive jaringan, bukan di hard drive lokal (untuk pencadangan dan tujuan lain di luar cakupan pertanyaan ini). Saya tidak bisa mengubah kebijakan itu.
Saya BISA memiliki file lokal di luar skema itu dan begitulah cara server Apache saya diatur. Sepenuhnya lokal.
Saya telah menginstal Git. Ini menginstal Bash. Ketika saya menjalankan Bash dan cd ~
(mengubah ke direktori root) saya menemukannya (root Bash) mengarah ke direktori pengguna jaringan saya. Saya ingin tidak melakukan itu. Saya ingin ~
berada di tempat lain di hard drive saya. Saya menginginkannya sehingga ketika saya melakukan operasi lain seperti menginstal sertifikat, kunci SSH, dll. Defaultnya tidak akan secara otomatis menggunakan direktori jaringan itu.
Saya telah mencari dengan sia-sia di mana-mana, dan semua yang dapat saya temukan mengacu pada jawaban yang melibatkan alias, pengalihan, dan lokasi yang ditunjuk $ HOME. Tapi bukan itu yang saya inginkan sama sekali.
Pertanyaannya adalah: Bisakah saya mengubah direktori itu? Dan jika demikian: Bagaimana?
UPDATE: Jadi, $ HOME adalah yang perlu saya modifikasi. Namun saya tidak dapat menemukan di mana variabel mitos $ HOME ini disetel jadi saya berasumsi itu adalah versi sistem Linux dari PATH atau semacamnya. Pokoknya ...
Saya memiliki file "profil" di bawah git/etc
. Berikut isinya (perhatikan 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
~
mewakili direktori home Anda. MengubahHOME
variabel lingkungan akan mengubah kemana perginya.HOME
variabel lingkungan tidak hanya berubah di mana~
menunjuk, tetapi juga semua yang mengakses direktori home pengguna harus pergi ke sana.~
hanyalah singkatan dari "direktori home pengguna", jadi di mana pun~
menunjuk, ada direktori home pengguna.Jawaban:
Saya tidak mengerti, mengapa Anda tidak ingin mengatur
$HOME
variabel lingkungan karena itu menyelesaikan persis apa yang Anda minta.cd ~
tidak berarti mengubah direktori root , tetapi mengubah direktori home pengguna , yang diatur oleh$HOME
variabel lingkungan.Solusi cepat
Edit
C:\Program Files (x86)\Git\etc\profile
dan setel$HOME
variabel ke apa pun yang Anda inginkan (tambahkan jika tidak ada). Tempat yang bagus bisa jadi misalnya tepat setelah suatu kondisi dikomentari# Set up USER's home directory
. Itu harus dalam format MinGW, misalnya:Simpan, buka Git Bash dan jalankan
cd ~
. Anda harus berada di direktori/c/my/custom/home
sekarang.Semua yang mengakses profil pengguna harus masuk ke direktori ini, bukan ke profil Windows Anda di drive jaringan.
Catatan:
C:\Program Files (x86)\Git\etc\profile
dibagikan oleh semua pengguna, jadi jika mesin digunakan oleh banyak pengguna, ada baiknya untuk menyetelnya$HOME
secara dinamis:Solusi yang lebih bersih
Atur variabel lingkungan
HOME
di Windows ke direktori apa pun yang Anda inginkan. Dalam hal ini, Anda harus mengaturnya dalam format jalur Windows (dengan garis miring terbalik, misalnyac:\my\custom\home
), Git Bash akan memuatnya dan mengubahnya menjadi formatnya.Jika Anda ingin mengubah direktori home untuk semua pengguna di mesin Anda , setel sebagai variabel lingkungan sistem , di mana Anda dapat menggunakan
%USERNAME%
variabel contoh sehingga setiap pengguna akan memiliki direktori home-nya sendiri, misalnya:Jika Anda ingin mengubah direktori home hanya untuk Anda sendiri , setel sebagai variabel lingkungan pengguna , sehingga pengguna lain tidak akan terpengaruh. Dalam kasus ini, Anda cukup membuat kode keras untuk seluruh jalur:
sumber
profile
? Hanya catatan bahwa isi dariHOME
variabel harus terlihat seperti ini di git-bash:/c/some/path
.HOME="c://path/to/custom/root/"
Dalam kasus saya, yang harus saya lakukan hanyalah menambahkan variabel Pengguna berikut di Windows:
Nama
HOME
variabel: Nilai variabel:
%USERPROFILE%
Cara mengatur Variabel Lingkungan (Anda dapat menggunakan variabel Pengguna untuk bagian nama pengguna jika Anda bukan administrator sistem)
sumber
HOME=/c/Users/$USERNAME
ke profil.Saya akan membagikan apa yang saya lakukan, yang tidak hanya berfungsi untuk Git, tetapi juga MSYS / MinGW.
The
HOME
variabel lingkungan tidak biasanya ditetapkan untuk aplikasi Windows, sehingga menciptakan itu melalui Windows tidak mempengaruhi apa-apa lagi. Dari Properti Komputer (klik kanan pada Komputer - atau apa pun namanya - di Explorer, dan pilih Properti, atau Panel Kontrol -> Sistem dan Keamanan -> Sistem), pilihAdvanced system settings
, laluEnvironment Variables...
buat yang baruHOME
,, dan tetapkan dimanapun kamu suka.Jika Anda tidak dapat membuat variabel lingkungan baru, jawaban lain akan tetap berfungsi. (Saya membahas detail tentang cara membuat variabel lingkungan justru karena sangat sulit ditemukan.)
sumber
rundll32 sysdm.cpl,EditEnvironmentVariables
,, dari prompt perintah, atau ketikenvironment
di menu mulai untuk menjalankan perintah yang sama.%USERPROFILE%
adalah nilai yang baik untuk variabel lingkungan HOME Anda . Lihat jawaban sayaHOME
(~
) lebih dekat ke/
pohon root . Saya sebenarnya membuat direktoriC:/home
dan menggunakannya. Juga, BTW, OP mencatat bahwa baginya, miliknya%USERPROFILE%
ada di drive jaringan, dan sangat menyakitkan untuk digunakan seperti yang Anda jelaskan.Alih-alih memodifikasi global,
profile
Anda dapat membuat.bash_profile
di$HOME
direktori default Anda (misalnyaC:\Users\WhateverUser\.bash_profile
) dengan konten berikut:sumber
.bash_profile
adalah cara yang benar untuk menyesuaikan lingkungan Anda, peretasan.profile
bukanlah praktik yang baik.~/.profile
baik-baik saja. Faktanya, dokumen lebih memilihnya daripada~/.bash_profie
: "File yang sesuai untuk variabel lingkungan yang mempengaruhi hanya pengguna tertentu (daripada sistem secara keseluruhan) adalah ... ~ / .profile." Dan: "File konfigurasi shell seperti ... ~ / .bash_profile ... sering disarankan untuk menyetel variabel lingkungan. Meskipun ini dapat berfungsi pada shell Bash untuk program yang dimulai dari shell, variabel yang disetel dalam file tersebut tidak tersedia secara default ke program yang dimulai dari lingkungan grafis dalam sesi desktop. " help.ubuntu.com/community/EnvironmentVariables1. Klik kanan untuk pintasan Gitbash pilih Properties
2. Pilih tab "Shortcut"
3. Ketik direktori awal Anda ke kolom "Start in"
4. Hapus bagian "--cd-to-home" dari kolom "Target"
sumber
$HOME
variabelJadi, $ HOME adalah yang perlu saya modifikasi. Namun saya tidak dapat menemukan di mana variabel mitos $ HOME ini disetel jadi saya berasumsi itu adalah versi sistem Linux dari PATH atau semacamnya. Pokoknya ... **
Menjawab
Menambahkan HOME di bagian atas
profile
file berhasil.HOME="c://path/to/custom/root/"
.sumber
Git 2.23 (Q3 2019) cukup eksplisit tentang cara
HOME
disetel.Lihat commit e12a955 (04 Jul 2019) oleh Karsten Blees (
kblees
) .(Digabung oleh Junio C Hamano -
gitster
- di commit fc613d2 , 19 Jul 2019)Sekarang, mingw.c menyertakan kode berikut:
sumber
Saya menghadapi masalah yang persis sama. Drive rumah saya dipetakan ke drive jaringan. Juga
Namun di bawah ini berfungsi dari baris perintah dan saya dapat menambahkan
HOME
ke variabel lingkungan.rundll32 sysdm.cpl,EditEnvironmentVariables
sumber
Saya tahu ini adalah pertanyaan lama, tetapi ini adalah hasil google teratas untuk "jendela gitbash homedir" jadi saya pikir saya akan menambahkan temuan saya.
Tidak peduli apa yang saya coba, saya tidak dapat memulai git-bash di mana pun kecuali drive jaringan saya, (U :) dalam kasus saya membuat setiap operasi memerlukan waktu 15-20 detik untuk merespons. (Karyawan jarak jauh di VPN, drive jaringan yang dihosting di sisi lain negara)
Saya mencoba mengatur variabel HOME dan HOMEDIR di windows.
Saya mencoba mengatur variabel HOME dan HOMEDIR di file git installation'setc / profile.
Saya mencoba mengedit "Mulai" di pintasan git-bash menjadi C: / user / myusername.
Perintah "env" di dalam shell git-bash akan menampilkan c: / user / myusername yang benar. Tapi git-bash masih akan dimulai di U:
Apa yang akhirnya memperbaikinya untuk saya adalah mengedit pintasan git-bash dan menghapus "--cd-to-home" dari baris Target.
Saya menggunakan Windows 10 yang menjalankan Git-for-windows 2.22.0 versi terbaru.
sumber
Ini dia: Ini dia: Buat Titik Pemulihan Sistem. Masuk dengan akun admin. Hapus folder C: \ SomeUser. Pindahkan folder c: \ Users \ SomeUser sehingga menjadi c: \ SomeUser. Buka editor registri. Arahkan ke HKLM \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ ProfileList. Cari "ProfileImagePath" hingga Anda menemukan salah satu yang mengarah ke c: \ Users \ SomeUser. Ubah sehingga mengarah ke c: \ SomeUser. Gunakan System Restore jika ada yang salah.
sumber