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분명히 우리는 여전히 디렉토리를 변경하고 싶기 때문에 먼저 변경합니다 . 쉘이 cd사용자 정의 함수를 재귀적으로 호출하는 대신 내장 기능을 사용하도록 앞에 *를 붙인 다음 이를 인수로 cd()제공하여 쉘에 의해 확장됩니다. $@함수에 제공된 모든 인수에 적용됩니다.
  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 &.

관련 정보