Ubah lokasi ~ direktori di instalasi Windows Git Bash

144

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
PEWColina
sumber
~mewakili direktori home Anda. Mengubah HOMEvariabel lingkungan akan mengubah kemana perginya.
Sekadar catatan: HOMEvariabel lingkungan tidak hanya berubah di mana ~menunjuk, tetapi juga semua yang mengakses direktori home pengguna harus pergi ke sana.
David Ferenczy Rogožan
~hanyalah singkatan dari "direktori home pengguna", jadi di mana pun ~menunjuk, ada direktori home pengguna.
David Ferenczy Rogožan
Ya, saya tidak dapat menemukan variabel $ HOME ini untuk menyetelnya. Di atas saya menambahkan seperti apa file profil saya.
PEWColina
Saya mengerti, Anda mungkin memiliki versi Git yang berbeda. versi apa yang Anda punya? BTW mencoba menambahkan pengaturan HOME di akhir profil. Tapi mungkin saja, itu akan ditimpa di tempat lain.
David Ferenczy Rogožan

Jawaban:

145

Saya tidak mengerti, mengapa Anda tidak ingin mengatur $HOMEvariabel lingkungan karena itu menyelesaikan persis apa yang Anda minta.

cd ~tidak berarti mengubah direktori root , tetapi mengubah direktori home pengguna , yang diatur oleh $HOMEvariabel lingkungan.

Solusi cepat

Edit C:\Program Files (x86)\Git\etc\profiledan setel $HOMEvariabel 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:

HOME=/c/my/custom/home

Simpan, buka Git Bash dan jalankan cd ~. Anda harus berada di direktori /c/my/custom/homesekarang.

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 $HOMEsecara dinamis:

HOME=/c/Users/$USERNAME

Solusi yang lebih bersih

Atur variabel lingkungan HOMEdi Windows ke direktori apa pun yang Anda inginkan. Dalam hal ini, Anda harus mengaturnya dalam format jalur Windows (dengan garis miring terbalik, misalnya c:\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:

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

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:

HOME=c:\my\custom\home
David Ferenczy Rogožan
sumber
3
Terima kasih, saya tidak dapat menemukan variabel $ HOME di file profil saya. Saya telah menambahkan ke pertanyaan. Silakan lihat. mungkin saya perlu mencari di tempat lain untuk variabel itu?
PEWColina
1
Tidak ada file lain di seluruh direktori yang memanggil / menyetel $ HOME.
PEWColina
1
Jadi, apakah Anda mencoba menambahkannya di mana saja? Misalnya ke bagian bawah profile? Hanya catatan bahwa isi dari HOMEvariabel harus terlihat seperti ini di git-bash: /c/some/path.
David Ferenczy Rogožan
7
menambahkan HOME di bagian atas file profil berfungsi. HOME="c://path/to/custom/root/"
PEWColina
3
Menambahkan variabel lingkungan sistem 'rumah' memecahkan masalah daripada mengedit file profil di folder git
firstpostcommenter
47

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)

EliandroRibeiro
sumber
3
Ini bekerja dengan sempurna untuk saya, dan merupakan solusi yang lebih baik IMO untuk jawaban yang diterima.
dan_g
2
Jawaban ini harus di atas.
pengguna4015990
1
Ini berfungsi tetapi tidak saat menggunakan banyak pengguna di mesin yang sama. Saya harus pergi dengan menambahkan HOME=/c/Users/$USERNAMEke profil.
Gonzo
3
Ini harus menjadi jawaban teratas. Ini satu-satunya cara (satu-satunya cara yang dapat saya temukan) agar GitBash menggunakan direktori .ssh di folder pengguna Windows saya (C: \ Users \ UserName). Di sistem saya, defaultnya adalah% HOMEDRIVE% (M :). Dan tentu saja itu akan tetap berfungsi setelah dan diperbarui ke GitBash!
YanisTheYak
1
Ini berfungsi jika Anda tidak memiliki set variabel $ HOME, tetapi sepertinya OP memiliki $ HOME yang ditetapkan oleh kebijakan perusahaan. Saya punya masalahnya juga. Jawaban ini tidak berfungsi dalam kasus itu (pengaturan baru secara otomatis ditimpa oleh kebijakan perusahaan).
bitsmack
39

Saya akan membagikan apa yang saya lakukan, yang tidak hanya berfungsi untuk Git, tetapi juga MSYS / MinGW.

The HOMEvariabel 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), pilih Advanced system settings, lalu Environment Variables...buat yang baru HOME,, 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.)

Menachem
sumber
5
Jika Anda tidak memiliki akses admin untuk mengubah lingkungan dari panel kontrol, Anda perlu mengeluarkan perintah berikut rundll32 sysdm.cpl,EditEnvironmentVariables ,, dari prompt perintah, atau ketik environmentdi menu mulai untuk menjalankan perintah yang sama.
Chris Chiasson
2
Ini berhasil bagi saya untuk menyetel direktori home untuk git-bash. Terima kasih atas jaminan ulang bahwa tidak masalah untuk mengatur variabel lingkungan HOME di Windows, dan juga instruksi terperinci tentang cara melakukannya. Satu perubahan sederhana untuk mencapai tujuan saya.
Stephen Hosking
%USERPROFILE%adalah nilai yang baik untuk variabel lingkungan HOME Anda . Lihat jawaban saya
EliandroRibeiro
@EliandroRibeiro Itu kemungkinan, dan tergantung pada kebutuhan Anda, mungkin ide yang bagus. Bagi saya sendiri, saya secara khusus tidak melakukannya seperti itu. Sebagian untuk menjaga lingkungan Windows dan Unix-like terpisah (untuk menghindari kekacauan), dan sebagian lagi untuk membuat my HOME( ~) lebih dekat ke /pohon root . Saya sebenarnya membuat direktori C:/homedan menggunakannya. Juga, BTW, OP mencatat bahwa baginya, miliknya %USERPROFILE%ada di drive jaringan, dan sangat menyakitkan untuk digunakan seperti yang Anda jelaskan.
Menachem
1
Ya Menachem, saya menghargai ketepatan Anda, tetapi apa yang ingin saya capai hanyalah detail proses tetapi menekankan pada hasil, yang telah dikonfirmasi oleh banyak orang termasuk Stephen Hosking dan saya. Yaitu, bagi saya hasil akhir itu penting, detail lainnya lebih merupakan gangguan. Semoga Anda tidak keberatan.
xpt
23

Alih-alih memodifikasi global, profileAnda dapat membuat .bash_profiledi $HOMEdirektori default Anda (misalnya C:\Users\WhateverUser\.bash_profile) dengan konten berikut:

export HOME="C:\my\projects\dir"
cd "$HOME" # if you'd like it to be the starting dir of the git shell
dekkard
sumber
Iya! .bash_profileadalah cara yang benar untuk menyesuaikan lingkungan Anda, peretasan .profilebukanlah praktik yang baik.
roblogic
1
@ropata "hacking" ~/.profilebaik-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/EnvironmentVariables
Hawkeye Parker
8

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

Özgür Öztürk
sumber
5
tidak benar-benar mengubah $HOMEvariabel
roblogic
1
Versi Windows berapa? Tampaknya tidak mungkin untuk masuk ke Properti di Windows 10.
Peter Mortensen
@PeterMortensen klik kanan ke Gitbash SHORTCUT pilih Properties
Özgür Öztürk
ugh, hanya ini yang saya butuhkan, terima kasih. pintasannya masuk ke folder program Git dan .bash_profile / .bashrc tidak berpengaruh. akhirnya cukup setel folder Start In ke direktori home saya dan semuanya baik-baik saja. ini semua adalah sesuatu yang gila terkait dengan penetapan direktori home perusahaan saya, seperti yang dikatakan poster asli.
Pantai Nathan
4

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 ... **

Menjawab

Menambahkan HOME di bagian atas profilefile berhasil.

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

Jadi, $HOMEapa yang perlu saya modifikasi.

Namun saya tidak dapat menemukan di mana $HOMEvariabel mitos ini diatur jadi saya berasumsi itu adalah versi sistem Linux dari PATH atau semacamnya.

Git 2.23 (Q3 2019) cukup eksplisit tentang cara HOMEdisetel.

Lihat commit e12a955 (04 Jul 2019) oleh Karsten Blees ( kblees) .
(Digabung oleh Junio ​​C Hamano - gitster- di commit fc613d2 , 19 Jul 2019)

mingw: menginisialisasi HOME saat memulai

HOMEinisialisasi secara historis diduplikasi di banyak tempat berbeda, termasuk /etc/profile, skrip peluncuran seperti git-bash.vbsdan gitk.cmd, dan (meskipun sedikit rusak) di git-wrapper.

Bahkan proyek yang tidak terkait seperti GitExtensionsdan TortoiseGitperlu mengimplementasikan logika yang sama untuk dapat memanggil git secara langsung.

Inisialisasi HOMEdalam kode startup Git sendiri sehingga pada akhirnya kami dapat menghentikan semua kode inisialisasi duplikat.

Sekarang, mingw.c menyertakan kode berikut:

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

Saya menghadapi masalah yang persis sama. Drive rumah saya dipetakan ke drive jaringan. Juga

  1. Tidak ada akses Tulis ke drive rumah
  2. Tidak ada akses tulis ke profil bash Git
  3. Tidak ada hak admin untuk mengubah variabel lingkungan dari panel kontrol.

Namun di bawah ini berfungsi dari baris perintah dan saya dapat menambahkan HOMEke variabel lingkungan.

rundll32 sysdm.cpl,EditEnvironmentVariables

garg10may
sumber
Ini hanyalah jalan pintas konsol untuk mengakses editor variabel lingkungan
Raúl Salinas-Monteagudo
0

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.

grsiepka.dll
sumber
1
Hai grsiepka - terima kasih atas kontribusi pertama Anda untuk SO. Membaca jawaban Anda (saya sedang mengulasnya) yang menarik adalah bahwa ini bukanlah jawaban serta deskripsi tentang apa yang Anda lakukan, tetapi semuanya tidak berhasil;). Bayangkan pengguna lain mencari jawaban dan menemukan pertanyaan ini - lalu mereka mengharapkan / menginginkan jawaban (diterima) untuk memberi tahu mereka cara memperbaiki masalah mereka. Jawaban yang bagus ditulis dengan pemikiran ini. Bisakah Anda mengedit jawaban Anda dan membuatnya lebih pendek? Terima kasih.
Carlo Wood
1
Tak satu pun dari jawaban yang "diterima" berhasil untuk saya. Saya memposting apa yang dilakukan. Jika itu tidak membantu, silakan hapus jawaban saya.
grsiepka
-6

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.

Oz Bar-Shalom
sumber
4
Ini akan memindahkan profil pengguna Windows-nya. Saya tidak berpikir itu yang dia inginkan.
David Ferenczy Rogožan
1
Dan sangat mungkin, di bawah pengaturan perusahaan, dia mungkin tidak memiliki izin untuk ini.
Menachem