Git Bash의 Windows 설치에서 ~ 디렉토리 위치 변경


138

나는 올바른 질문을하고 있는지조차 확실하지 않습니다. 내 상황을 설명하겠습니다 :

이것은 Windows 7의 Git에 관한 것입니다.

우리 회사는 로컬 하드 드라이브가 아닌 네트워크 드라이브에 Windows 사용자 디렉토리를 설정합니다 (이 질문의 범위를 벗어난 백업 및 기타 목적으로). 해당 정책을 변경할 수 없습니다.

그러나 그 계획 외부에 로컬 파일을 가질 수 있으며 이것이 내 Apache 서버 설정 방법입니다. 완전히 지역.

Git을 설치했습니다. Bash를 설치합니다. Bash를 시작하고 cd ~(루트 디렉토리로 변경) Bash 루트가 네트워크 사용자 디렉토리를 가리키는 것으로 나타났습니다. 나는 그것을하지 않기를 바랍니다. 내가 원하는 ~다른 곳에서 내 하드 드라이브에있을 수 있습니다. 인증서, SSH 키 등의 다른 작업을 수행 할 때 기본값이 해당 네트워크 디렉토리를 자동으로 사용하지 않기를 원합니다.

나는 어디에서나 헛된 것을 검색했으며, 찾을 수있는 모든 것은 별칭, 리디렉션 및 $ HOME이 가리키는 위치와 관련된 답변을 말합니다. 그러나 그것은 내가 원하는 것이 아닙니다.

문제는 : 해당 디렉토리를 변경할 수 있습니까? 그리고 만약 그렇다면 : 어떻게?

업데이트 : 따라서 $ HOME을 수정해야합니다. 그러나이 신화적인 $ HOME 변수가 설정된 위치를 찾을 수 없으므로 Linux 시스템 버전의 PATH 또는 다른 것으로 가정했습니다. 어쨌든 ...

에 "프로필"파일이 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

답변:


140

$HOME환경 변수 를 설정하고 싶지 않은 이유를 이해하지 못합니다. 왜냐하면 정확히 원하는 것을 해결하기 때문입니다.

cd ~루트 디렉토리 로의 변경이 아니라 $HOME환경 변수에 의해 설정된 사용자의 홈 디렉토리로의 변경을 의미 합니다.

빠른 솔루션

원하는대로 변수를 편집 C:\Program Files (x86)\Git\etc\profile하고 설정 $HOME하십시오 (없는 경우 추가하십시오). 좋은 장소는 예를 들어에 의해 언급 된 조건 바로 뒤에있을 수 있습니다 # Set up USER's home directory. 예를 들어 MinGW 형식이어야합니다.

HOME=/c/my/custom/home

저장하고 Git Bash를 열고 실행하십시오 cd ~. 이제 디렉토리에 있어야합니다 /c/my/custom/home.

사용자 프로파일에 액세스하는 모든 것은 네트워크 드라이브의 Windows 프로파일 대신이 디렉토리로 이동해야합니다.

참고 : C:\Program Files (x86)\Git\etc\profile 모든 사용자가 공유하므로 여러 사용자가 기계를 사용하는 경우 $HOME동적으로 설정하는 것이 좋습니다 .

HOME=/c/Users/$USERNAME

클리너 솔루션

HOMEWindows 의 환경 변수 를 원하는 디렉토리로 설정하십시오 . 이 경우 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변수의 내용은 git-bash에서 다음과 같아야합니다 /c/some/path.
David Ferenczy Rogožan

6
프로필 파일 상단에 HOME을 추가하면 효과가 있습니다. HOME="c://path/to/custom/root/"
PEWColina

3
추가 '홈'시스템 환경 변수 오히려 자식 폴더에있는 프로필 파일을 편집보다는 문제를 해결
firstpostcommenter

43

필자의 경우 Windows 에서 다음 사용자 변수 를 추가하기 만하면 됩니다.

변수 이름 : HOME
변수 값 :%USERPROFILE%

환경 변수를 설정하는 방법 ( 시스템 관리자가 아닌 경우 사용자 이름에 사용자 변수 섹션 사용할 수 있음 )


3
이것은 나를 위해 완벽하게 작동했으며 받아 들여진 대답에 대한 더 나은 솔루션 IMO입니다.
dan_g

2
이 답변은 맨 위로 이동해야합니다.
user4015990

1
동일한 컴퓨터에서 여러 사용자를 사용할 때는 작동하지 않았습니다. 나는 HOME=/c/Users/$USERNAME프로필에 추가 해야했습니다.
gonzo

3
이것이 최고의 답변이되어야합니다. GitBash가 Windows 사용자 폴더 (C : \ Users \ UserName)의 .ssh 디렉토리를 사용하도록하는 유일한 방법입니다. 내 시스템에서 기본값은 % HOMEDRIVE % (M :)입니다. 물론 GitBash 이후에도 계속 작동하고 업데이트됩니다!
YanisTheYak

1
$ HOME 변수 세트가없는 경우 작동하지만 OP에 회사 정책에 의해 $ HOME이 설정된 것처럼 들립니다. 나도 그의 문제가있다. 이 경우에는이 답변이 작동하지 않습니다 (회사 정책이 새 설정을 자동으로 덮어 씁니다).
bitsmack

38

내가 한 일을 공유하고 Git뿐만 아니라 MSYS / MinGW에서도 작동합니다.

HOME윈도우를 통해 생성하는 것이 무엇에 영향을 미치지 않았다 있도록 환경 변수는 일반적으로, Windows 응용 프로그램 설정되지 않습니다. 컴퓨터 속성 (탐색기에서 컴퓨터 또는 이름이 지정된 것을 마우스 오른쪽 버튼으로 클릭하고 속성 또는 제어판-> 시스템 및 보안-> 시스템을 선택)에서을 선택한 Advanced system settings다음 Environment Variables...새 것을 생성 HOME하고 할당하십시오. 당신이 원하는 곳에.

새로운 환경 변수를 만들 수 없으면 다른 답변이 여전히 작동합니다. (나는 찾기가 너무 어렵 기 때문에 환경 변수를 정확하게 만드는 방법에 대한 세부 사항을 살펴 보았습니다.)


4
제어판에서 환경을 변경할 수있는 관리자 권한이없는 경우 rundll32 sysdm.cpl,EditEnvironmentVariables 명령 프롬프트에서 다음 명령environment 을 실행 하거나 시작 메뉴에 입력 하여 동일한 명령을 실행해야합니다.
Chris Chiasson

2
이것은 git-bash의 홈 디렉토리를 설정하는 데 도움이되었습니다. Windows에서 HOME 환경 변수를 설정하고이를 수행하는 방법에 대한 자세한 지시 사항을 확인하는 것이 확실합니다. 내 목표를 달성하기위한 간단한 변화.
Stephen Hosking

%USERPROFILE%HOME 환경 변수에 좋은 값 입니다. 내 답변보기
EliandroRibeiro

@EliandroRibeiro 그것은 가능성이며, 당신의 필요에 따라, 좋은 생각 일 것입니다. 나 자신을 위해, 내가 특별히 않았다 없는 방법 ithat 그것을 할 수 있습니다. 부분적으로 Windows 및 유지하는 유닉스 같은 환경 (피하기 혼란에) 분리, 그리고 부분적으로 내을 가지고 HOME( ~가까이 루트에) /나무. 나는 실제로 디렉토리를 만들고 그것을 C:/home사용합니다. 또한, BTW, OP는 그에게 %USERPROFILE%네트워크 드라이브에 있으며 설명대로 사용하기가 너무 고통 스럽다고 지적했습니다 .
Menachem

1
예 Menachem, 귀하의 정확성에 감사하지만, 달성하고자하는 것은 프로세스 세부 사항이지만 결과에 대한 스트레스였습니다. Stephen Hosking 및 저를 포함한 많은 사람들이 확인했습니다. 즉, 나에게 최종 결과가 중요합니다. 다른 세부 사항은 더 혼란입니다. 그것이 당신과 함께 잘되기를 바랍니다.
xpt

21

전역을 수정하는 대신 다음 내용 으로 기본 디렉토리 (예 :)를 profile만들 수 있습니다 ..bash_profile$HOMEC:\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

7

1. Gitbash 바로 가기를 마우스 오른쪽 버튼으로 클릭하여 속성을
선택 하십시오. 2. "바로 가기"탭을 선택하십시오.
3. "시작 위치"필드에 시작 디렉토리를 입력하십시오.
4. "대상"필드에서 "--cd-to-home"부분 제거


5
실제로 $HOME변수를 변경하지 않습니다
roblogic

1
어떤 버전의 Windows입니까? Windows 10의 속성 에 액세스 할 수없는 것 같습니다 .
Peter Mortensen

Gitbash 바로 가기 @PeterMortensen 마우스 오른쪽 버튼으로 클릭은 속성 선택
오즈 Öztürk에게

4

따라서 $ HOME을 수정해야합니다. 그러나이 신화적인 $ HOME 변수가 설정된 위치를 찾을 수 없으므로 Linux 시스템 버전의 PATH 또는 다른 것으로 가정했습니다. 어쨌든 ... **

대답

profile파일 상단에 HOME을 추가하면 효과가 있습니다.

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변수가 설정된 위치를 찾을 수 없으므로 Linux 시스템 버전의 PATH 또는 다른 것으로 가정했습니다.

Git 2.23 (2019 년 3 분기)은 HOME 은 설정 .

Karsten Blees ( )의 commit e12a955 (2019 년 7 월 04 일)를 참조하십시오 . ( Junio ​​C Hamano의해 병합 - 커밋 fc613d2 , 2019 년 7 월 19 일)kblees
gitster

mingw : 시작시 HOME 초기화

HOME초기화는 역사적으로 등 다양한 장소에서 중복 된 /etc/profile발사와 같은 스크립트, git-bash.vbs그리고 gitk.cmd, 그리고 (약간 깨진 있지만)에에 git-wrapper.

같은 심지어 관련이없는 프로젝트 GitExtensionsTortoiseGit같은 논리를 구현하는 필요가 직접 자식을 호출 할 수 있습니다.

초기화 HOME힘내 자신의 시작 코드에서 우리는 결국 모든 중복 초기화 코드를 폐기 할 수 있도록.

이제 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

-1

나는 이것이 오래된 질문이라는 것을 알고 있지만 "gitbash homedir windows"에 대한 최고의 Google 결과이므로 내 결과를 추가 할 것이라고 생각했습니다.

내가 무엇을 시도하든 git-bash를 네트워크 드라이브 (U :) 이외의 곳에서 시작할 수는 없었습니다. (VPN의 원격 직원, 다른 쪽에서 호스팅되는 네트워크 드라이브)

Windows에서 HOME 및 HOMEDIR 변수를 설정하려고했습니다.

git 설치의 etc / profile 파일에서 HOME 및 HOMEDIR 변수를 설정하려고했습니다.

git-bash 바로 가기에서 "시작"을 C : / user / myusername으로 편집하려고했습니다.

git-bash 쉘 안의 "env"명령은 올바른 c : / user / myusername을 보여줍니다. 그러나 git-bash는 여전히 U에서 시작합니다.

궁극적으로 나를 위해 고친 것은 git-bash 바로 가기를 편집하고 대상 줄에서 "--cd-to-home"을 제거하는 것이 었습니다.

최신 버전의 Git-for-windows 2.22.0을 실행하는 Windows 10을 사용하고 있습니다.


1
안녕하세요 grsiepka-SO에 대한 첫 번째 기여에 감사드립니다. 당신의 대답을 읽고 (나는 그것을 검토하고있다) 튀어 나온 것은 그것이 대답하지 않았고 당신이 모두 시도한 것에 대한 설명뿐만 아니라 작동하지 않았다는 것이다;). 다른 사용자가 답변을 찾고이 질문을 찾는다고 상상해보십시오. 그러면 (수락 된) 답변이 문제를 해결하는 방법을 알려줄 것으로 기대 / 원합니다. 이것을 염두에두고 좋은 답변을 작성했습니다. 답을 편집하여 더 짧게 만들 수 있습니까? 감사.
Carlo Wood

"허용 된"답변 중 어느 것도 나를 위해 일하지 않았습니다. 나는 무엇을 게시했습니다. 도움이되지 않으면 언제든지 답변을 삭제하십시오.
grsiepka

-6

여기로 이동 : 여기로 이동 : 시스템 복원 지점을 만듭니다. 관리자 계정으로 로그온하십시오. C : \ SomeUser 폴더를 삭제하십시오. c : \ Users \ SomeUser 폴더를 c : \ SomeUser가되도록 이동하십시오. 레지스트리 편집기를 엽니 다. HKLM \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ ProfileList로 이동하십시오. c : \ Users \ SomeUser를 가리키는 것을 찾을 때까지 "ProfileImagePath"를 검색하십시오. c : \ SomeUser를 가리 키도록 수정하십시오. 문제가 발생할 경우 시스템 복원을 사용하십시오.


4
그러면 Windows 사용자 프로필이 이동합니다. 나는 그것이 그가 원하는 것이라고 생각하지 않습니다.
David Ferenczy Rogožan

1
그리고 아마도 회사 설정 하에서 그는 이것에 대한 권한이 없을 수도 있습니다.
Menachem
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.