CD 명령을 실행한 후 git fetch를 실행하세요.

CD 명령을 실행한 후 git fetch를 실행하세요.

백그라운드에서 cd ​​명령을 실행한 후에 git fetch를 실행해야 하며, git 디렉토리에 있을 때만 실행해야 합니다.

답변1

이는 세 부분으로 나누어집니다:

  1. 현재 디렉터리를 변경하려면 일부 코드를 실행하세요. zsh에 다음 코드를 넣습니다.chpwd기능, 또는 배열에서 다른 이름을 가진 함수 chpwd_functions(). 바라보다디렉토리에 들어갈 때 bash 스크립트 실행bash 구현을 위해.
  2. Git 작업 복사본을 감지합니다. 당신은 git에만 관심이 있으므로,넌 달릴 수 있어git rev-parse --show-toplevel. 다른 버전 제어 시스템에 관심이 있다면 버전 제어를 감지할 수 있는 고급 프레임워크가 있습니다.
  3. 달리기 git fetch.

이는 git 저장소로 변경할 때 chpwd실행되는 구현 입니다.git fetch

chpwd () {
  set -- "$(git rev-parse --show-toplevel 2>/dev/null)"
  # If cd'ing into a git working copy and not within the same working copy
  if [ -n "$1" ] && [ "$1" != "$vc_root" ]; then
    vc_root="$1"
    git fetch
  fi
}
chpwd

이 코드는 쉘 시작 스크립트에 있습니다: .zshrczsh의 경우, .bashrcbash의 경우(bash에서도 필요함)chpwd디렉터리 변경 호출을 위한 래퍼).

답변2

다음 기능을 사용할 수 있습니다.

function cd() {
    builtin cd "$@"
    if [[ -d .git ]]; then
        git fetch &
    fi
}

쉘의 시작 파일에 추가하십시오.

여기서는 몇 가지 일이 일어나고 있습니다.

  1. 먼저, 자체 사용자 정의 코드로 내장된 동작을 재정의합니다 function cd() {.cd
  2. 분명히 우리는 여전히 디렉토리를 변경하고 싶기 때문에 먼저 변경합니다. 쉘이 사용자 정의 함수를 재귀적으로 호출하는 대신 builtin내장 함수를 사용하도록 앞에 *를 붙인 다음 이를 인수로 제공합니다. 쉘 확장 함수에 제공된 모든 매개변수.cdcd()$@
  3. 디렉토리가 존재하는지 테스트하여 .git해당 디렉토리가 git 저장소에 있는지 테스트하고 존재하는 경우 를 git fetch추가하여 쉘에 알려 줍니다 &.

의 출력은 git fetch여전히 ​​터미널로 전송됩니다. 포기하고 싶다면 다음을 사용할 수 있습니다.

git fetch & 2>&1 >/dev/null

이렇게 하면 stderr을 stdout으로 리디렉션한 다음 stdout을 /dev/null.

[*]: 이는 builtinPOSIX에 없으므로 이 솔루션은 모든 셸에서 이식 가능하지 않습니다.

[^]: git 저장소가 비어 있으면 실패할 것입니다. 그러나 드라이브에 베어 저장소가 없을 것이 거의 확실하므로 누가 신경쓰겠습니까?

답변3

홈 디렉터리의 .bashrc 또는 .zshrc 파일에 함수를 만듭니다.

파일 맨 아래에 다음을 추가합니다.

cd_fetch() {
    command cd "$@"
    if [ -d .git ]; then
        git fetch & 
    fi
}
alias cdg=cd_fetch

이제 터미널을 닫았다가 다시 열거나 실행하면 방금 별칭을 지정한 source ~/.zshrc명령을 사용하여 디렉터리를 변경할 수 있습니다.cdg

또한, 사용하기 싫고 cdg사용하고 싶다면 cd별칭 정의를 로 변경 하면 됩니다 alias cd=cd_fetch.

이 접근 방식은 git fetch가 일반적으로 수행하는 모든 내용을 출력합니다. 이를 침묵시키기 위해 git fetch &교체합니다 git fetch 2>&1 >/dev/null &.

관련 정보