백그라운드에서 cd 명령을 실행한 후에 git fetch를 실행해야 하며, git 디렉토리에 있을 때만 실행해야 합니다.
답변1
이는 세 부분으로 나누어집니다:
- 현재 디렉터리를 변경하려면 일부 코드를 실행하세요. zsh에 다음 코드를 넣습니다.
chpwd
기능, 또는 배열에서 다른 이름을 가진 함수chpwd_functions
(예). 바라보다디렉토리에 들어갈 때 bash 스크립트 실행bash 구현을 위해. - Git 작업 복사본을 감지합니다. 당신은 git에만 관심이 있으므로,넌 달릴 수 있어
git rev-parse --show-toplevel
. 다른 버전 제어 시스템에 관심이 있다면 버전 제어를 감지할 수 있는 고급 프레임워크가 있습니다. - 달리기
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
이 코드는 쉘 시작 스크립트에 있습니다: .zshrc
zsh의 경우, .bashrc
bash의 경우(bash에서도 필요함)chpwd
디렉터리 변경 호출을 위한 래퍼).
답변2
다음 기능을 사용할 수 있습니다.
function cd() {
builtin cd "$@"
if [[ -d .git ]]; then
git fetch &
fi
}
쉘의 시작 파일에 추가하십시오.
여기서는 몇 가지 일이 일어나고 있습니다.
- 먼저, 자체 사용자 정의 코드로 내장된 동작을 재정의합니다
function cd() {
.cd
- 분명히 우리는 여전히 디렉토리를 변경하고 싶기 때문에 먼저 변경합니다. 쉘이 사용자 정의 함수를 재귀적으로 호출하는 대신
builtin
내장 함수를 사용하도록 앞에 *를 붙인 다음 이를 인수로 제공합니다. 쉘 확장 함수에 제공된 모든 매개변수.cd
cd()
$@
- 디렉토리가 존재하는지 테스트하여
.git
해당 디렉토리가 git 저장소에 있는지 테스트하고 존재하는 경우 를git fetch
추가하여 쉘에 알려 줍니다&
.
의 출력은 git fetch
여전히 터미널로 전송됩니다. 포기하고 싶다면 다음을 사용할 수 있습니다.
git fetch & 2>&1 >/dev/null
이렇게 하면 stderr을 stdout으로 리디렉션한 다음 stdout을 /dev/null
.
[*]: 이는 builtin
POSIX에 없으므로 이 솔루션은 모든 셸에서 이식 가능하지 않습니다.
[^]: 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 &
.