เปลี่ยนตำแหน่งของไดเร็กทอรี ~ ในการติดตั้ง Git Bash ของ Windows


144

ฉันไม่แน่ใจด้วยซ้ำว่าฉันถามคำถามที่ถูกต้อง ให้ฉันอธิบายสถานการณ์ของฉัน:

นี่เป็นเรื่องเกี่ยวกับ Git บน Windows 7

บริษัท ของฉันตั้งค่าไดเร็กทอรีผู้ใช้ Windows บนไดรฟ์เครือข่ายไม่ใช่ในฮาร์ดไดรฟ์ภายในเครื่อง (สำหรับการสำรองข้อมูลและวัตถุประสงค์อื่น ๆ ที่อยู่นอกเหนือขอบเขตของคำถามนี้) ฉันไม่สามารถเปลี่ยนแปลงนโยบายนั้นได้

ฉันสามารถมีไฟล์ในเครื่องนอกโครงร่างนั้นได้และนั่นคือวิธีการตั้งค่าเซิร์ฟเวอร์ Apache ของฉัน ในท้องถิ่นทั้งหมด

ฉันติดตั้ง Git มันติดตั้ง Bash เมื่อฉันเปิดไฟ Bash และcd ~(เปลี่ยนเป็นไดเรกทอรีราก) ฉันพบว่า (ราก Bash) ชี้ไปที่ไดเรกทอรีผู้ใช้เครือข่ายของฉัน ฉันไม่ต้องการให้ทำเช่นนั้น ฉันต้องการ ~อยู่ที่อื่นในฮาร์ดไดรฟ์ของฉัน ฉันต้องการอย่างนั้นเมื่อฉันดำเนินการอื่น ๆ เช่นการติดตั้งใบรับรองคีย์ SSH ฯลฯ ค่าเริ่มต้นจะไม่ใช้ไดเร็กทอรีเครือข่ายนั้นโดยอัตโนมัติ

ฉันค้นหาอย่างไร้สาระทุกที่และทั้งหมดที่ฉันหาได้หมายถึงคำตอบที่เกี่ยวข้องกับนามแฝงการเปลี่ยนเส้นทางและตำแหน่งที่ $ HOME ชี้ไป แต่นั่นไม่ใช่สิ่งที่ฉันต้องการเลย

คำถามคือฉันสามารถเปลี่ยนไดเร็กทอรีนั้นได้หรือไม่? และถ้าเป็นเช่นนั้น: อย่างไร?

UPDATE: ดังนั้น $ HOME คือสิ่งที่ฉันต้องแก้ไข อย่างไรก็ตามฉันไม่พบว่าตัวแปร $ HOME ในตำนานนี้ถูกตั้งค่าไว้ที่ใดดังนั้นฉันจึงคิดว่ามันเป็น PATH เวอร์ชันระบบ Linux หรืออะไรบางอย่าง อย่างไรก็ตาม ...

ฉันมีไฟล์ "โปรไฟล์" อยู่ด้านgit/etcล่าง นี่คือเนื้อหา (สังเกตว่าไม่มี $ 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

~แสดงถึงโฮมไดเร็กทอรีของคุณ การเปลี่ยนHOMEตัวแปรสภาพแวดล้อมจะเปลี่ยนที่ไป

หมายเหตุ: HOMEตัวแปรสภาพแวดล้อมไม่ได้เปลี่ยนแปลงเฉพาะ~จุดที่ชี้ไปเท่านั้น แต่ยังรวมถึงทุกสิ่งที่เข้าถึงไดเร็กทอรีหลักของผู้ใช้ควรไปที่นั่นด้วย
David Ferenczy Rogožan

~เป็นเพียงชวเลขสำหรับ "โฮมไดเร็กทอรีของผู้ใช้" ดังนั้นทุกที่ที่~ชี้ไปที่มีโฮมไดเร็กทอรีของผู้ใช้
David Ferenczy Rogožan

ใช่ฉันไม่สามารถหาตัวแปร $ HOME นี้เพื่อตั้งค่าได้ ด้านบนฉันได้เพิ่มลักษณะของไฟล์โปรไฟล์ของฉัน
PEWColina

ฉันเข้าใจว่าคุณอาจมี Git เวอร์ชันอื่น คุณมีรุ่นอะไร? BTW พยายามเพิ่มการตั้งค่า HOME ที่ส่วนท้ายของโปรไฟล์ แต่เป็นไปได้ว่ามันจะถูกเขียนทับที่อื่น
David Ferenczy Rogožan

คำตอบ:


145

ฉันไม่เข้าใจว่าทำไมคุณไม่ต้องการตั้งค่า$HOMEตัวแปรสภาพแวดล้อมเพราะนั่นจะช่วยแก้ปัญหาที่คุณต้องการได้

cd ~ไม่ได้หมายถึงการเปลี่ยนไดเร็กทอรีรากแต่เปลี่ยนเป็นโฮมไดเร็กทอรีของผู้ใช้ซึ่งกำหนดโดย$HOMEตัวแปรสภาพแวดล้อม

โซลูชัน Quick'n'dirty

แก้ไขC:\Program Files (x86)\Git\etc\profileและตั้งค่า$HOMEตัวแปรเป็นสิ่งที่คุณต้องการ (เพิ่มได้หากไม่มี) # Set up USER's home directoryสถานที่ที่ดีอาจจะเป็นเช่นขวาหลังจากสภาพที่แสดงความเห็นโดย ต้องอยู่ในรูปแบบ MinGW ตัวอย่างเช่น:

HOME=/c/my/custom/home

บันทึกมันเปิด Git cd ~ทุบตีและดำเนินการ /c/my/custom/homeตอนนี้คุณควรอยู่ในไดเรกทอรีแล้ว

ทุกสิ่งที่เข้าถึงโปรไฟล์ของผู้ใช้ควรเข้าไปในไดเร็กทอรีนี้แทนที่จะเป็นโปรไฟล์ Windows ของคุณบนไดรฟ์เครือข่าย

หมายเหตุ: C:\Program Files (x86)\Git\etc\profileใช้ร่วมกันโดยผู้ใช้ทุกคนดังนั้นหากผู้ใช้หลายคนใช้เครื่องก็ควรตั้งค่า$HOMEแบบไดนามิก:

HOME=/c/Users/$USERNAME

น้ำยาทำความสะอาด

ตั้งค่าตัวแปรสภาพแวดล้อมHOMEใน Windows เป็นไดเร็กทอรีที่คุณต้องการ ในกรณีนี้คุณต้องตั้งค่าในรูปแบบเส้นทางของ Windows (ที่มีแบ็กสแลชเช่นc:\my\custom\home) Git Bash จะโหลดและแปลงเป็นรูปแบบ

หากคุณต้องการเปลี่ยนโฮมไดเร็กทอรีสำหรับผู้ใช้ทั้งหมดบนเครื่องของคุณให้ตั้งค่าเป็นตัวแปรสภาวะแวดล้อมระบบซึ่งคุณสามารถใช้เป็น%USERNAME%ตัวแปรตัวอย่างดังนั้นผู้ใช้ทุกคนจะมีโฮมไดเร็กทอรีของตัวเองเช่น:

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

หากคุณต้องการเปลี่ยนไดเร็กทอรีหลักด้วยตัวคุณเองให้ตั้งค่าเป็นตัวแปรสภาพแวดล้อมของผู้ใช้ดังนั้นผู้ใช้รายอื่นจะไม่ได้รับผลกระทบ ในกรณีนี้คุณสามารถฮาร์ดโค้ดเส้นทางทั้งหมด:

HOME=c:\my\custom\home

3
ขอบคุณฉันไม่พบตัวแปร $ HOME ในไฟล์โปรไฟล์ของฉัน ฉันได้เพิ่มคำถามแล้ว โปรดลองดู บางทีฉันอาจต้องมองหาตัวแปรนั้นจากที่อื่น
PEWColina

1
ไม่มีไฟล์อื่นในไดเรกทอรีทั้งหมดเรียก / ตั้งค่า $ HOME
PEWColina

1
คุณลองเพิ่มที่ใดก็ได้หรือไม่? ตัวอย่างเช่นด้านล่างของprofile? เพียงแค่ทราบว่าเนื้อหาของHOMEตัวแปรควรมีลักษณะเช่นนี้ใน /c/some/pathGit-ทุบตี:
David Ferenczy Rogožan

7
การเพิ่ม HOME ที่ด้านบนของไฟล์โปรไฟล์ใช้งานได้ HOME="c://path/to/custom/root/"
PEWColina

3
การเพิ่มตัวแปรสภาพแวดล้อมระบบ 'home' ช่วยแก้ปัญหาได้แทนที่จะแก้ไขไฟล์โปรไฟล์ในโฟลเดอร์ git
firstpostcommenter

47

ในกรณีของฉันสิ่งที่ฉันต้องทำคือเพิ่มตัวแปร Userต่อไปนี้ใน Windows:

ชื่อHOME
ตัวแปร: ค่าตัวแปร:%USERPROFILE%

วิธีตั้งค่าตัวแปรสภาพแวดล้อม (คุณสามารถใช้ตัวแปรผู้ใช้สำหรับส่วนชื่อผู้ใช้หากคุณไม่ใช่ผู้ดูแลระบบ)


3
สิ่งนี้ใช้ได้ผลอย่างสมบูรณ์สำหรับฉันและเป็นทางออกที่ดีกว่า IMO สำหรับคำตอบที่ยอมรับ
dan_g

2
คำตอบนี้ควรไปด้านบน
user4015990

1
วิธีนี้ใช้ได้ผล แต่ใช้ไม่ได้เมื่อใช้ผู้ใช้หลายคนในเครื่องเดียวกัน ฉันต้องไปกับการเพิ่มHOME=/c/Users/$USERNAMEในโปรไฟล์
gonzo

3
นี่น่าจะเป็นคำตอบอันดับต้น ๆ เป็นวิธีเดียว (วิธีเดียวที่ฉันสามารถหาได้) เพื่อให้ GitBash ใช้ไดเร็กทอรี. ssh ในโฟลเดอร์ผู้ใช้ Windows ของฉัน (C: \ Users \ UserName) ในระบบของฉันมันผิดนัด% HOMEDRIVE% (M :) และแน่นอนว่ามันจะยังใช้งานได้หลังจากนั้นและอัปเดตเป็น GitBash!
YanisTheYak

1
ใช้งานได้ถ้าคุณไม่มีชุดตัวแปร $ HOME แต่ดูเหมือนว่า OP มี $ HOME ที่กำหนดโดยนโยบายของ บริษัท ฉันมีปัญหาของเขาเหมือนกัน คำตอบนี้ใช้ไม่ได้ในกรณีนั้น (การตั้งค่าใหม่จะถูกเขียนทับโดยอัตโนมัติโดยนโยบายของ บริษัท )
bitsmack

39

ฉันจะแบ่งปันสิ่งที่ฉันทำซึ่งไม่เพียง แต่ใช้ได้กับ Git เท่านั้น แต่ยังรวมถึง MSYS / MinGW ด้วย

โดยHOMEปกติตัวแปรสภาพแวดล้อมไม่ได้ถูกตั้งค่าสำหรับแอปพลิเคชัน Windows ดังนั้นการสร้างผ่าน Windows จึงไม่ส่งผลกระทบต่อสิ่งอื่นใด จากคุณสมบัติของคอมพิวเตอร์ (คลิกขวาที่คอมพิวเตอร์ - หรือชื่ออะไรก็ตาม - ใน Explorer และเลือกคุณสมบัติหรือแผงควบคุม -> ระบบและความปลอดภัย -> ระบบ) เลือกAdvanced system settingsจากนั้นEnvironment Variables...สร้างใหม่HOMEและกำหนด ทุกที่ที่คุณต้องการ

หากคุณไม่สามารถสร้างตัวแปรสภาพแวดล้อมใหม่ได้คำตอบอื่นจะยังคงใช้งานได้ (ฉันอ่านรายละเอียดเกี่ยวกับวิธีการสร้างตัวแปรสภาพแวดล้อมอย่างแม่นยำเพราะมันซับซ้อนมากที่จะค้นหา)


5
หากคุณไม่มีสิทธิ์เข้าถึงผู้ดูแลระบบเพื่อเปลี่ยนสภาพแวดล้อมจากแผงควบคุมคุณจะต้องออกคำสั่งต่อไปนี้ rundll32 sysdm.cpl,EditEnvironmentVariablesจากพรอมต์คำสั่งหรือพิมพ์environmentในเมนูเริ่มเพื่อเรียกใช้คำสั่งเดียวกัน
Chris Chiasson

2
สิ่งนี้ใช้ได้ผลสำหรับฉันในการตั้งค่าโฮมไดเร็กทอรีสำหรับ git-bash ขอขอบคุณสำหรับการรับรองอีกครั้งว่าสามารถตั้งค่าตัวแปรสภาพแวดล้อม HOME ใน Windows ได้และคำแนะนำโดยละเอียดเกี่ยวกับวิธีการดำเนินการ การเปลี่ยนแปลงง่ายๆเพียงอย่างเดียวเพื่อบรรลุเป้าหมายของฉัน
Stephen Hosking

%USERPROFILE%เป็นค่าที่ดีสำหรับตัวแปรสภาพแวดล้อมHOMEของคุณ ดูคำตอบของฉัน
EliandroRibeiro

@EliandroRibeiro นั่นเป็นไปได้และขึ้นอยู่กับความต้องการของคุณอาจเป็นความคิดที่ดี สำหรับตัวฉันเองฉันไม่ได้ทำแบบนั้นโดยเฉพาะ บางส่วนเพื่อให้สภาพแวดล้อมที่เหมือน Windows และ Unix แยกจากกัน (เพื่อหลีกเลี่ยงความยุ่งเหยิง) และอีกส่วนหนึ่งเพื่อให้ my HOME( ~) อยู่ใกล้กับ root /tree มากขึ้น ฉันสร้างไดเร็กทอรีC:/homeและใช้สิ่งนั้นจริงๆ นอกจากนี้ BTW OP ยังตั้งข้อสังเกตว่าสำหรับเขาเขา%USERPROFILE%อยู่ในไดรฟ์เครือข่ายและเจ็บปวดอย่างมากที่จะใช้ตามที่คุณอธิบายไว้
Menachem

1
ใช่ Menachem ฉันขอขอบคุณที่คุณเป็นคนแม่นยำ แต่สิ่งที่ฉันต้องการบรรลุคือเพียงแค่รายละเอียดของกระบวนการ แต่เน้นไปที่ผลลัพธ์ซึ่งได้รับการยืนยันจากหลาย ๆ คนรวมถึง Stephen Hosking และฉัน กล่าวคือสำหรับฉันผลลัพธ์สุดท้ายมีความสำคัญรายละเอียดอื่น ๆ เป็นสิ่งที่ทำให้ไขว้เขวมากกว่า หวังว่าจะโอเคกับคุณ
xpt

23

แทนที่จะแก้ไข global profileคุณสามารถสร้าง.bash_profileใน$HOMEไดเร็กทอรีเริ่มต้นของคุณ(เช่นC:\Users\WhateverUser\.bash_profile) ด้วยเนื้อหาต่อไปนี้:

export HOME="C:\my\projects\dir"
cd "$HOME" # if you'd like it to be the starting dir of the git shell

ใช่ .bash_profileเป็นวิธีที่ถูกต้องในการปรับแต่งสภาพแวดล้อมของคุณการแฮ็ก.profileไม่ใช่แนวทางปฏิบัติที่ดี
roblogic

1
@ropata "แฮ็ก" ~/.profileไม่เป็นไร ในความเป็นจริงเอกสารชอบมากกว่า~/.bash_profie: "ไฟล์ที่เหมาะสมสำหรับตัวแปรสภาพแวดล้อมที่มีผลต่อผู้ใช้เฉพาะ (แทนที่จะเป็นระบบโดยรวม) คือ ... ~ / .profile" และ: "ไฟล์กำหนดค่าเชลล์เช่น ... ~ / .bash_profile ... มักจะแนะนำสำหรับการตั้งค่าตัวแปรสภาพแวดล้อมแม้ว่าสิ่งนี้อาจใช้ได้กับ Bash เชลล์สำหรับโปรแกรมที่เริ่มต้นจากเชลล์ แต่ตัวแปรที่ตั้งค่าในไฟล์เหล่านั้นจะไม่พร้อมใช้งานตามค่าเริ่มต้น ไปยังโปรแกรมที่เริ่มต้นจากสภาพแวดล้อมแบบกราฟิกในเซสชันเดสก์ท็อป " help.ubuntu.com/community/EnvironmentVariables
Hawkeye Parker

8

1. คลิกขวาที่ทางลัด Gitbash เลือกคุณสมบัติ 2. เลือก
แท็บ "ทางลัด"
3. พิมพ์ไดเรกทอรีเริ่มต้นของคุณเป็นฟิลด์ "เริ่มใน"
4. ลบส่วน "--cd-to-home" ออกจากช่อง "เป้าหมาย"


5
ไม่ได้เปลี่ยน$HOMEตัวแปรจริง ๆ
roblogic

1
Windows รุ่นอะไร? ดูเหมือนจะเป็นไปไม่ได้ที่จะไปที่Propertiesใน Windows 10
Peter Mortensen

@PeterMortensen คลิกขวาเพื่อ Gitbash ลัดเลือก Properties
ÖzgürÖztürk

เอ่อนี่คือทั้งหมดที่ฉันต้องการขอบคุณ ทางลัดเข้าไปในโฟลเดอร์โปรแกรม Git และ. bash_profile / .bashrc ไม่มีผลใด ๆ ในที่สุดก็ตั้งค่าโฟลเดอร์ Start In เป็นโฮมไดเร็กทอรีของฉันและทุกอย่างก็เรียบร้อย ทั้งหมดนี้เป็นเรื่องบ้าๆที่เกี่ยวข้องกับการกำหนดโฮมไดเร็กทอรีของ บริษัท ของฉันอย่างที่ผู้โพสต์บอกไว้
หาดนาธาน

4

ดังนั้น $ HOME คือสิ่งที่ฉันต้องแก้ไข อย่างไรก็ตามฉันไม่พบว่าตัวแปร $ HOME ในตำนานนี้ถูกตั้งค่าไว้ที่ใดดังนั้นฉันจึงคิดว่ามันเป็น PATH เวอร์ชันระบบ Linux หรืออะไรบางอย่าง อย่างไรก็ตาม ... **

ตอบ

การเพิ่ม HOME ที่ด้านบนของprofileไฟล์ใช้งานได้

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

2

ดังนั้น$HOMEสิ่งที่ฉันต้องแก้ไขคือ

อย่างไรก็ตามฉันไม่พบว่า$HOMEตัวแปรในตำนานนี้ถูกตั้งค่าไว้ที่ใดดังนั้นฉันจึงสันนิษฐานว่าเป็น PATH เวอร์ชันระบบ Linux หรืออะไร

Git 2.23 (Q3 2019) ค่อนข้างชัดเจนเกี่ยวกับวิธีการHOMEตั้งค่า

ดูกระทำ e12a955 (4 กรกฎาคม 2019) โดยKarsten Blees (kblees )
(ผสานโดยJunio ​​C Hamano - gitster-ในการกระทำ fc613d2 , 19 ก.ค. 2019)

mingw: เริ่มต้น HOME เมื่อเริ่มต้น

HOMEเริ่มต้นถูกทำซ้ำในอดีตในสถานที่ที่แตกต่างกันจำนวนมากรวมทั้ง/etc/profileสคริปต์เปิดตัวเช่นgit-bash.vbsและgitk.cmdและ (ถึงแม้จะเสียเล็กน้อย) git-wrapperใน

แม้แต่โครงการที่ไม่เกี่ยวข้องเช่นGitExtensionsและTortoiseGitจำเป็นต้องใช้ตรรกะเดียวกันเพื่อให้สามารถเรียกใช้คอมไพล์ได้โดยตรง

เริ่มต้นHOMEด้วยรหัสเริ่มต้นของ Git เพื่อให้เราสามารถเลิกใช้รหัสเริ่มต้นที่ซ้ำกันทั้งหมดได้ในที่สุด

ตอนนี้mingw.cมีรหัสต่อไปนี้:

/* 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);
}

0

ฉันประสบปัญหาเดียวกันทุกประการ ไดรฟ์ที่บ้านของฉันแมปกับไดรฟ์เครือข่าย นอกจากนี้

  1. ไม่มีสิทธิ์เขียนถึงไดรฟ์ที่บ้าน
  2. ไม่มีการเขียนเข้าถึงโปรไฟล์ Git bash
  3. ไม่มีสิทธิ์ของผู้ดูแลระบบในการเปลี่ยนตัวแปรสภาพแวดล้อมจากแผงควบคุม

อย่างไรก็ตามด้านล่างทำงานจากบรรทัดคำสั่งและฉันสามารถเพิ่มHOMEตัวแปรสภาพแวดล้อมได้

rundll32 sysdm.cpl,EditEnvironmentVariables


นี่เป็นเพียงทางลัดของคอนโซลเพื่อเข้าถึงตัวแก้ไขตัวแปรสภาพแวดล้อม
Raúl Salinas-Monteagudo

0

ฉันรู้ว่านี่เป็นคำถามเก่า แต่เป็นผลการค้นหาอันดับต้น ๆ ของ Google สำหรับ "gitbash homedir windows" จึงคิดว่าฉันจะเพิ่มสิ่งที่ค้นพบ

ไม่ว่าฉันจะพยายามอย่างไรฉันก็ไม่สามารถเริ่ม git-bash ได้จากทุกที่นอกจากไดรฟ์เครือข่ายของฉัน (U :) ในกรณีของฉันการดำเนินการทุกครั้งจะใช้เวลา 15-20 วินาทีในการตอบสนอง (พนักงานระยะไกลบน VPN ไดรฟ์เครือข่ายที่โฮสต์อยู่อีกฟากหนึ่งของประเทศ)

ฉันลองตั้งค่าตัวแปร HOME และ HOMEDIR ใน windows

ฉันลองตั้งค่าตัวแปร HOME และ HOMEDIR ในไฟล์ 'setc / profile ของการติดตั้ง git

ฉันพยายามแก้ไข "เริ่มใน" บนทางลัด git-bash ให้เป็น C: / user / myusername

คำสั่ง "env" ภายใน git-bash shell จะแสดง c: / user / myusername ที่ถูกต้อง แต่ git-bash จะยังคงเริ่มต้นใน U:

สิ่งที่แก้ไขได้ในที่สุดสำหรับฉันคือการแก้ไขทางลัด git-bash และลบ "--cd-to-home" ออกจากบรรทัด Target

ฉันใช้ Windows 10 ที่ใช้ Git-for-windows 2.22.0 เวอร์ชันล่าสุด


1
สวัสดี grsiepka - ขอบคุณสำหรับการสนับสนุน SO ครั้งแรก กำลังอ่านคำตอบของคุณ (ฉันกำลังตรวจสอบอยู่) สิ่งที่กระโดดออกไปคือมันไม่ได้เป็นคำตอบมากนักรวมถึงคำอธิบายของสิ่งที่คุณพยายามทั้งหมดที่ไม่ได้ผล ลองนึกภาพผู้ใช้คนอื่นกำลังมองหาคำตอบและพบคำถามนี้ - จากนั้นพวกเขาคาดหวัง / ต้องการคำตอบ (ที่ยอมรับ) เพื่อบอกวิธีแก้ไขปัญหา คำตอบที่ดีเขียนไว้ในใจ คุณสามารถแก้ไขคำตอบและทำให้สั้นลงได้ไหม ขอบคุณ.
Carlo Wood

1
ไม่มีคำตอบที่ "ยอมรับ" สำหรับฉัน ฉันโพสต์สิ่งที่ทำ หากไม่เป็นประโยชน์อย่าลังเลที่จะลบคำตอบของฉัน
grsiepka

-6

ได้แล้ว: จัดไป: สร้างจุดคืนค่าระบบ เข้าสู่ระบบด้วยบัญชีผู้ดูแลระบบ ลบโฟลเดอร์ C: \ SomeUser ย้ายโฟลเดอร์ c: \ Users \ SomeUser เพื่อให้กลายเป็น c: \ SomeUser เปิดตัวแก้ไขรีจิสทรี ไปที่ HKLM \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ ProfileList ค้นหา "ProfileImagePath" จนกว่าคุณจะพบสิ่งที่ชี้ไปที่ c: \ Users \ SomeUser แก้ไขเพื่อให้ชี้ไปที่ c: \ SomeUser ใช้ System Restore ในกรณีที่เกิดข้อผิดพลาด


4
สิ่งนี้จะย้ายโปรไฟล์ผู้ใช้ Windows ของเขา ฉันไม่คิดว่านั่นคือสิ่งที่เขาต้องการ
David Ferenczy Rogožan

1
และเป็นไปได้มากภายใต้การจัดตั้งองค์กรเขาอาจไม่ได้รับอนุญาตสำหรับสิ่งนี้
Menachem
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.