Thay đổi vị trí của thư mục ~ trong bản cài đặt Windows của Git Bash


138

Tôi thậm chí không chắc chắn tôi đang hỏi đúng câu hỏi. Hãy để tôi giải thích tình hình của tôi:

Đây là về Git trên Windows 7.

Công ty của tôi thiết lập thư mục người dùng Windows trên ổ đĩa mạng, không phải trên ổ cứng cục bộ (để sao lưu và các mục đích khác ngoài phạm vi của câu hỏi này). Tôi không thể thay đổi chính sách đó.

Tuy nhiên, tôi có thể có các tệp cục bộ bên ngoài lược đồ đó và đó là cách máy chủ Apache của tôi được thiết lập. Hoàn toàn địa phương.

Tôi đã cài đặt Git. Nó cài đặt Bash. Khi tôi kích hoạt Bash và cd ~(thay đổi thư mục gốc) tôi thấy rằng nó (gốc Bash) trỏ đến thư mục người dùng mạng của tôi. Tôi muốn nó không làm điều đó. Tôi muốn ~ở nơi khác trên ổ cứng của tôi. Tôi muốn nó để khi tôi thực hiện các hoạt động khác như cài đặt chứng chỉ, khóa SSH, v.v. mặc định của nó sẽ không tự động sử dụng thư mục mạng đó.

Tôi đã tìm kiếm vô ích ở khắp mọi nơi, và tất cả những gì tôi có thể tìm thấy đề cập đến câu trả lời liên quan đến bí danh, chuyển hướng và vị trí $ HOME chỉ đến. Nhưng đó không phải là điều tôi muốn chút nào.

Câu hỏi là: Tôi có thể thay đổi thư mục đó không? Và nếu vậy: Làm thế nào?

CẬP NHẬT: Vì vậy, $ HOME là những gì tôi cần sửa đổi. Tuy nhiên, tôi không thể tìm thấy nơi biến $ HOME huyền thoại này được đặt nên tôi giả sử đó là phiên bản hệ thống Linux của PATH hoặc một cái gì đó. Dù sao ...

Tôi có một tập tin "hồ sơ" dưới git/etc. Dưới đây là nội dung (thông báo không có $ 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

~đại diện cho thư mục nhà của bạn. Thay đổiHOME biến môi trường sẽ thay đổi nơi nó đi.

Chỉ cần lưu ý: HOMEbiến môi trường không chỉ thay đổi nơi ~chỉ đến, mà cả mọi thứ truy cập vào thư mục chính của người dùng sẽ xuất hiện ở đó.
David Ferenczy Rogožan

~chỉ là một cách viết tắt cho "thư mục nhà của người dùng", vì vậy bất cứ nơi nào ~trỏ đến, đều có thư mục chính của người dùng.
David Ferenczy Rogožan

Phải, tôi không thể tìm thấy biến $ HOME này để đặt nó. Ở trên tôi đã thêm những gì tập tin hồ sơ của tôi trông như thế nào.
PEWColina

Tôi thấy, bạn có thể có một phiên bản Git khác. Bạn có phiên bản nào? BTW cố gắng thêm cài đặt HOME vào cuối hồ sơ. Nhưng có thể, nó sẽ bị ghi đè ở một nơi khác.
David Ferenczy Rogožan

Câu trả lời:


140

Tôi không hiểu, tại sao bạn không muốn đặt $HOMEbiến môi trường vì điều đó giải quyết chính xác những gì bạn yêu cầu.

cd ~không có nghĩa là thay đổi thư mục gốc , nhưng thay đổi thư mục chính của người dùng , được đặt bởi $HOMEbiến môi trường.

Giải pháp nhanh chóng

Chỉnh sửa C:\Program Files (x86)\Git\etc\profilevà đặt $HOMEbiến thành bất cứ điều gì bạn muốn (thêm nó nếu nó không ở đó). Một nơi tốt có thể là ví dụ ngay sau khi một điều kiện được bình luận bởi # Set up USER's home directory. Nó phải ở định dạng MinGW, ví dụ:

HOME=/c/my/custom/home

Lưu nó, mở Git Bash và thực thi cd ~. Bạn nên ở trong một thư mục /c/my/custom/homebây giờ.

Mọi thứ truy cập hồ sơ người dùng nên vào thư mục này thay vì hồ sơ Windows của bạn trên ổ đĩa mạng.

Ghi chú: C:\Program Files (x86)\Git\etc\profile được chia sẻ bởi tất cả người dùng, vì vậy nếu máy được nhiều người dùng sử dụng, bạn nên thiết lập $HOMEđộng:

HOME=/c/Users/$USERNAME

Dung dịch sạch hơn

Đặt biến môi trường HOME trong Windows thành bất kỳ thư mục nào bạn muốn. Trong trường hợp này, bạn phải đặt nó ở định dạng đường dẫn Windows (với dấu gạch chéo ngược, vd c:\my\custom\home), Git Bash sẽ tải nó và chuyển đổi nó sang định dạng của nó.

Nếu bạn muốn thay đổi thư mục chính cho tất cả người dùng trên máy của mình , hãy đặt nó làm biến môi trường hệ thống , nơi bạn có thể sử dụng %USERNAME%biến ví dụ để mọi người dùng sẽ có thư mục chính của riêng mình, ví dụ:

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

Nếu bạn muốn tự thay đổi thư mục chính , hãy đặt nó làm biến môi trường người dùng , để những người dùng khác sẽ không bị ảnh hưởng. Trong trường hợp này, bạn chỉ cần mã hóa toàn bộ đường dẫn:

HOME=c:\my\custom\home

3
Cảm ơn, tôi không thể tìm thấy biến $ HOME trong tệp hồ sơ của mình. Tôi đã thêm vào câu hỏi. Xin vui lòng xem qua. có lẽ tôi cần phải tìm nơi khác cho biến đó?
PEWColina

1
Không có tệp nào khác trong toàn bộ thư mục gọi / đặt $ HOME.
PEWColina

1
Vì vậy, bạn đã cố gắng chỉ cần thêm nó bất cứ nơi nào? Ví dụ đến đáy của profile? Chỉ cần lưu ý rằng nội dung của HOMEbiến sẽ trông như thế này trong git-bash : /c/some/path.
David Ferenczy Rogožan

6
thêm HOME ở đầu tập tin hồ sơ làm việc. HOME="c://path/to/custom/root/"
PEWColina

3
Thêm biến môi trường hệ thống 'nhà' đã giải quyết vấn đề thay vì chỉnh sửa tệp hồ sơ trong thư mục git
Firstpostcommenter 28/07/19

43

Trong trường hợp của tôi, tất cả những gì tôi phải làm là thêm biến Người dùng sau trên Windows:

Tên HOME
biến: Giá trị biến:%USERPROFILE%

Cách đặt Biến môi trường (Bạn có thể sử dụng biến Người dùng cho phần tên người dùng nếu bạn không phải là quản trị viên hệ thống)


3
Điều này làm việc hoàn hảo với tôi, và là một giải pháp tốt hơn IMO cho câu trả lời được chấp nhận.
dan_g

2
Câu trả lời này nên đi đầu.
user4015990

1
Điều này hoạt động nhưng không phải khi sử dụng nhiều người dùng trên cùng một máy. Tôi đã phải đi với thêm HOME=/c/Users/$USERNAMEvào hồ sơ.
gonzo

3
Đây phải là câu trả lời hàng đầu. Đó là cách duy nhất (cách duy nhất tôi có thể tìm thấy) để GitBash sử dụng thư mục .ssh trong thư mục người dùng Windows của tôi (C: \ Users \ UserName). Trên hệ thống của tôi, nó được mặc định là% HOMEDRIVE% (M :). Và tất nhiên nó vẫn sẽ hoạt động sau và cập nhật lên GitBash!
YanisTheYak

1
Điều này hoạt động nếu bạn không có bộ biến $ HOME, nhưng có vẻ như OP có $ HOME được đặt theo chính sách của công ty. Tôi cũng có vấn đề của anh ấy. Câu trả lời này không hoạt động trong trường hợp đó (cài đặt mới sẽ tự động được ghi đè bởi chính sách của công ty).
bitsmack

38

Tôi muốn chia sẻ những gì tôi đã làm, hoạt động không chỉ cho Git, mà cả MSYS / MinGW.

Biến HOMEmôi trường thường không được đặt cho các ứng dụng Windows, do đó, việc tạo nó thông qua Windows không ảnh hưởng đến bất kỳ điều gì khác. Từ Thuộc tính Máy tính (nhấp chuột phải vào Máy tính - hoặc bất kỳ tên nào được đặt tên - trong Explorer và chọn Thuộc tính hoặc Bảng điều khiển -> Hệ thống và Bảo mật -> Hệ thống), chọn Advanced system settings, sau đó Environment Variables...tạo một cái mới HOMEvà gán nó bất cứ nơi nào bạn muốn.

Nếu bạn không thể tạo các biến môi trường mới, câu trả lời khác sẽ vẫn hoạt động. (Tôi đã tìm hiểu chi tiết về cách tạo các biến môi trường chính xác bởi vì nó rất khó tìm.)


4
Nếu bạn không có quyền truy cập quản trị viên để thay đổi môi trường từ bảng điều khiển, bạn sẽ cần đưa ra lệnh sau rundll32 sysdm.cpl,EditEnvironmentVariables , từ dấu nhắc lệnh hoặc nhập environmentvào menu bắt đầu để khởi chạy cùng một lệnh.
Chris Chiasson

2
Điều này làm việc cho tôi để thiết lập thư mục chính cho git-bash. Cảm ơn bạn đã đảm bảo rằng bạn có thể đặt biến môi trường HOME trong Windows và hướng dẫn chi tiết về cách thực hiện. Một thay đổi đơn giản để thực hiện mục tiêu của tôi.
Stephen Hosking

%USERPROFILE%là một giá trị tốt cho biến môi trường HOME của bạn . Xem câu trả lời của tôi
EliandroRibeiro

@EliandroRibeiro Đó là một khả năng, và tùy thuộc vào nhu cầu của bạn, có thể là một ý tưởng tốt. Đối với bản thân tôi, tôi đặc biệt không làm theo cách đó. Một phần để giữ các môi trường giống như Windows và Unix (để tránh sự lộn xộn) và một phần để tôi HOME( ~) gần với /cây gốc hơn . Tôi thực sự đã tạo một thư mục C:/homevà sử dụng nó. Ngoài ra, BTW, OP lưu ý rằng đối với anh ta, anh ta %USERPROFILE%đang ở trên một ổ đĩa mạng và cực kỳ đau đớn khi sử dụng như bạn mô tả.
Menachem

1
Vâng Menachem, tôi đánh giá cao sự chính xác của bạn, nhưng điều tôi muốn đạt được chỉ đơn giản là chi tiết quá trình nhưng nhấn mạnh vào kết quả, điều này đã được xác nhận bởi nhiều người bao gồm cả Stephen Hosking và tôi. Tức là, đối với tôi kết quả cuối cùng có vấn đề, các chi tiết khác là một sự xao lãng. Hy vọng điều đó ổn với bạn.
xpt

21

Thay vì sửa đổi toàn cục, profilebạn có thể tạo thư mục .bash_profilemặc định $HOME(ví dụ C:\Users\WhateverUser\.bash_profile) với các nội dung sau:

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

Đúng! .bash_profilelà cách chính xác để tùy chỉnh môi trường của bạn, hack .profilekhông phải là thực hành tốt.
roblogic

1
@ropata "hack" ~/.profilelà ổn. Trên thực tế, các tài liệu thích nó hơn ~/.bash_profie: "Các tệp phù hợp cho các biến môi trường chỉ ảnh hưởng đến một người dùng cụ thể (chứ không phải toàn bộ hệ thống) là ... ~ / .profile." Và: "Các tệp cấu hình Shell như ... ~ / .bash_profile ... thường được đề xuất để đặt các biến môi trường. Mặc dù điều này có thể hoạt động trên shell Bash cho các chương trình bắt đầu từ shell, các biến được đặt trong các tệp đó không có sẵn theo mặc định đến các chương trình bắt đầu từ môi trường đồ họa trong phiên máy tính để bàn. " help.ubfox.com/community/EnvirVariabled
Hawkeye Parker

7

1. Nhấp chuột phải vào phím tắt Gitbash, chọn Thuộc tính 2.
Chọn tab "Phím tắt"
3. Nhập thư mục bắt đầu của bạn vào trường "Bắt đầu trong"
4.Remove "--cd-to-home" từ trường "Target"


5
không thực sự thay đổi $HOMEbiến
roblogic

1
Phiên bản nào của Windows? Dường như không thể truy cập vào Thuộc tính trong Windows 10.
Peter Mortensen

@PeterMortensen click chuột phải để Gitbash SHORTCUT chọn Properties
Özgür Öztürk

4

Vì vậy, $ HOME là những gì tôi cần sửa đổi. Tuy nhiên, tôi không thể tìm thấy nơi biến $ HOME huyền thoại này được đặt nên tôi giả sử đó là phiên bản hệ thống Linux của PATH hoặc một cái gì đó. Dù sao ... **

Câu trả lời

Thêm HOME ở đầu profile tập tin làm việc.

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

Vì thế, $HOME là những gì tôi cần sửa đổi.

Tuy nhiên tôi đã không thể tìm thấy nơi $HOMEbiến số huyền thoại này được đặt nên tôi cho rằng đó là phiên bản hệ thống Linux của PATH hoặc một cái gì đó.

Git 2.23 (Q3 2019) khá rõ ràng về cách HOME đặt.

Xem cam kết e12a955 (04 tháng 7 năm 2019) của Karsten Blees ( kblees) .
(Được hợp nhất bởi Junio ​​C Hamano - gitster- trong cam kết fc613d2 , ngày 19 tháng 7 năm 2019)

mingw: khởi tạo HOME khi khởi động

HOME/etc/profileKhởi tạo đã được nhân đôi trong lịch sử ở nhiều nơi khác nhau, bao gồm , khởi chạy các tập lệnh như git-bash.vbsgitk.cmdvà (mặc dù hơi bị hỏng) tronggit-wrapper .

Ngay cả các dự án không liên quan như GitExtensionsTortoiseGit cần phải thực hiện cùng một logic để có thể gọi git trực tiếp.

Khởi tạo HOMEmã khởi động của Git để cuối cùng chúng ta có thể rút lại tất cả mã khởi tạo trùng lặp.

Bây giờ, mingw.c bao gồm mã sau đây:

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

Tôi phải đối mặt với chính xác cùng một vấn đề. Ổ đĩa nhà của tôi ánh xạ tới một ổ đĩa mạng. Cũng thế

  1. Không có quyền truy cập vào ổ đĩa nhà
  2. Không có quyền ghi vào hồ sơ Git bash
  3. Không có quyền quản trị để thay đổi các biến môi trường từ bảng điều khiển.

Tuy nhiên dưới đây làm việc từ dòng lệnh và tôi đã có thể thêm HOMEvào các biến môi trường.

rundll32 sysdm.cpl,EditEnvironmentVariables


Đây chỉ là một phím tắt bàn điều khiển để truy cập trình soạn thảo biến môi trường
Raúl Salinas-Monteagudo

-1

Tôi biết đây là một câu hỏi cũ, nhưng nó là kết quả hàng đầu của google cho "cửa sổ homedir gitbash" vì vậy tôi đã thêm vào những phát hiện của mình.

Bất kể tôi đã cố gắng gì, tôi không thể bắt git-bash bắt đầu ở bất cứ đâu ngoài ổ đĩa mạng của mình, (U :) trong trường hợp của tôi khiến mọi thao tác mất 15-20 giây để phản hồi. (Nhân viên từ xa trên VPN, ổ đĩa mạng được lưu trữ ở phía bên kia của đất nước)

Tôi đã thử thiết lập các biến HOME và HOMEDIR trong windows.

Tôi đã thử thiết lập các biến HOME và HOMEDIR trong tệp hồ sơ / cài đặt git.

Tôi đã thử chỉnh sửa "Bắt đầu" trên phím tắt git-bash thành C: / user / myusername.

Lệnh "env" bên trong shell git-bash sẽ hiển thị đúng c: / user / myusername. Nhưng git-bash vẫn sẽ bắt đầu ở U:

Điều cuối cùng đã sửa nó cho tôi là chỉnh sửa phím tắt git-bash và xóa "--cd-to-home" khỏi dòng Target.

Tôi đang chạy Windows 10 phiên bản Git-for-windows 2.22.0 mới nhất.


1
Xin chào grsiepka - cảm ơn bạn đã đóng góp đầu tiên cho SO. Đọc câu trả lời của bạn (tôi đang xem lại), điều đó nhảy ra là nó không giống như một câu trả lời cũng như mô tả về những gì bạn đã làm mà không làm được;). Hãy tưởng tượng những người dùng khác đang tìm câu trả lời và tìm câu hỏi này - sau đó họ mong đợi / muốn câu trả lời (được chấp nhận) cho họ biết cách khắc phục vấn đề của họ. Một câu trả lời tốt được viết với điều này trong tâm trí. Bạn có thể chỉnh sửa câu trả lời của bạn và làm cho nó ngắn hơn? Cảm ơn.
Carlo Wood

Không có câu trả lời "được chấp nhận" nào làm việc cho tôi. Tôi đã đăng những gì đã làm. Nếu điều đó không hữu ích, hãy loại bỏ câu trả lời của tôi.
grsiepka

-6

Ở đây bạn đi: Ở đây bạn đi: Tạo một điểm khôi phục hệ thống. Đăng nhập dưới tài khoản quản trị viên. Xóa thư mục C: \ Một số người dùng. Di chuyển thư mục c: \ Users \ someUser để nó trở thành c: \ someUser. Mở trình soạn thảo sổ đăng ký. Điều hướng đến HKLM \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ ProfileList. Tìm kiếm "ProfileImagePath" cho đến khi bạn tìm thấy một điểm trỏ đến c: \ Users \ someUser. Sửa đổi nó để nó trỏ đến c: \ someUser. Sử dụng System Restore trong trường hợp xảy ra sự cố.


4
Điều này sẽ di chuyển hồ sơ người dùng Windows của mình. Tôi không nghĩ đó là những gì anh ấy muốn.
David Ferenczy Rogožan

1
Và rất có thể, theo một thiết lập công ty, anh ta có thể không được phép cho việc này.
Menachem
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.