Git 페치 또는 풀로 자동 정리


248

작업이 끝나서 잘 모르기 때문에 누군가가 원격 지점을 삭제하면 작업을 수행하지 않으며 git fetch --prune결국 삭제 된 지점을 다시 밀어 넣습니다.

매번 그것을 지정하지 않고 페치 / 풀을 할 때 Git이 프룬 모드를 사용하도록 강제 할 수있는 솔루션이 있습니까?


1
곧 (git 1.8.5, Q4 2013) repo의 로컬 구성에서 항상 정리 하려는 모든 구성을 지정할 수 있습니다 git fetch! 아래 답변을
VonC

답변:


396

자식 1.8.5 이후 (Q4 2013) :

" git fetch"(따라서 " git pull"도)는 " fetch.prune"및 " remote.*.prune"구성 변수를 확인하고 " --prune"명령 행 옵션이 제공된 것처럼 작동하는 방법을 배웠습니다 .

즉, remote.origin.prune을 true로 설정하면

git config remote.origin.prune true

모든 git fetch또는 git pull자동 치기 것입니다.

참고 : Git 2.12 (2017 년 1 분기)는이 구성과 관련된 버그를 수정하여 git remote rename오작동 을 일으킬 수 있습니다.
" git remote의 이름을 바꾸려면 어떻게합니까? "를 참조하십시오 .


commit 737c5a9 에서 더 많은 것을보십시오 :

" git fetch --prune"가 없으면 다른 쪽에서 이미 제거한 분기에 대한 원격 추적 분기가 영구적으로 유지됩니다.
어떤 사람들은 항상 " git fetch --prune"을 (를) 실행하려고합니다 .

항상 정리하거나 특정 리모콘에서 가져올 때 사용자를 수용하려면 두 가지 새로운 구성 변수 " fetch.prune"및 " remote.<name>.prune"를 추가하십시오.

  • " fetch.prune"를 사용하면 모든 페치 조작에 대해 제거를 사용할 수 있습니다.
  • " remote.<name>.prune"를 사용하면 리모컨마다 동작을 변경할 수 있습니다.

후자는 자연스럽게 전자를 재정의 --[no-]prune하고 명령 줄 의 옵션은 구성된 기본값을 재정의합니다.

--prune잠재적으로 파괴적인 작업 이므로 (Git은 삭제 된 참조에 대한 리플 로그를 보관하지 않습니다) 사용자 동의없이 제거하지 않기 때문에이 구성은 기본적으로 설정되어 있지 않습니다.


4
이것은 실제로 현재 출시 된 자식 1.8.5에 포함되어 있습니다
Bessey

1
모든 git repos에서 기본적 으로이 동작을 원합니다. 이것을 .gitconfig에 넣을 수있는 곳이 있습니까?
Andrew

47
앤드류 좋은 시작이 될 것이다git config --global fetch.prune true
VonC

1
항상 풀 때 가지 치기가 가능한 단점은 무엇입니까? 이 인용문은 리플 로그 이력이 영향을받는다고 언급하지만 어떤 실질적인 문제가 발생할 수 있습니까?
Grapho

3
@Grapho 실제 단점은 아니지만 ... stackoverflow.com/a/39862779/6309
VonC

143

git config --global fetch.prune true

항상에 --prune대한 git fetchgit pull모든 Git 저장소에서 :

git config --global fetch.prune true

위의 명령은 전역 Git 구성 (일반적으로 ~/.gitconfig)에 다음 줄을 추가합니다. git config -e --global글로벌 구성을 보는 데 사용하십시오 .

[fetch]
    prune = true

git config remote.origin.prune true

항상 --prune하나의 단일 저장소에서 :

git config remote.origin.prune true
                 #^^^^^^
                 #replace with your repo name

이 위의 명령은 로컬 Git 구성 (일반적으로 .git/config아래)을 마지막 줄 아래에 추가합니다 . git config -e로컬 구성을 보는 데 사용하십시오 .

[remote "origin"]
    url = xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
    fetch = +refs/heads/*:refs/remotes/origin/*
    prune = true

--global두 번째 명령 --local내에서 사용하거나 첫 번째 명령 내에서 대신 사용할 수도 있습니다 .


git config --global gui.pruneDuringFetch true

당신이 사용하는 경우에 git gui관심이있을 수 있습니다 :

git config --global gui.pruneDuringFetch true

그 내용은 다음과 같습니다.

[gui]
    pruneDuringFetch = true

참고 문헌

해당 문서 git help config:

--global

  쓰기 옵션 : ~/.gitconfig저장소 대신 글로벌 파일 .git/config에 쓰기, $XDG_CONFIG_HOME/git/config이 파일이 존재하고 ~/.gitconfig파일이없는 경우 파일에 쓰십시오 .

 

--local

  쓰기 옵션 : 저장소 .git/config파일에 씁니다 . 이것이 기본 동작입니다.

 

fetch.prune

  true 인 경우 fetch는 --prune옵션이 명령 줄에 제공된 것처럼 자동으로 작동합니다 . 도 참조하십시오 remote.<name>.prune.

 

gui.pruneDuringFetch

가져 오기를 수행 할 때 git-gui 가 원격 추적 분기를 제거해야하는   경우 "true" 입니다. 기본값은 "false"입니다.

 

remote.<name>.prune

  true로 설정하면 기본적으로이 원격에서 가져 오면 원격에 더 이상 존재하지 않는 원격 추적 참조도 제거됩니다 ( --prune옵션이 명령 행에 제공된 것처럼 ). fetch.prune설정이있는 경우 재정의 합니다.


1
사이드 노트 : 나는 단지에 대해 알게 git config -e하고 git config -e --global,이 게시물에서. 더 이상 vimgit config 파일의 특정 경로를 가리키고 해당 경로가 무엇인지 생각 해야하는 명령을 입력하지 않아도됩니다.
ecbrodie

1
이제이 작업을 수행 할 수 있습니다. 대단히 감사합니다.
sebingel

이 답변은 매우 철저하지만 형식 때문에 읽기가 매우 어렵습니다. "git fetch 및 git for git pull for all Git repositories를 항상 --prune하려면 : git config --global fetch.prune true"과 마찬가지로 (관련 문서에 대한 링크와 함께) 훌륭합니다.
Thibaud Colas

19

당신은 항상 원하는 경우 prune때를 fetch, 내가 사용하는 제안 할 수 별칭 .

입력 git config -e하여 편집기를 열고 특정 프로젝트의 구성을 변경하고 다음과 같은 섹션을 추가하십시오.

[alias]
pfetch = fetch --prune   

git pfetch정리 하면 가져 오는 시간이 자동으로 수행됩니다.


이해 했어요. 그건 그렇고 git pfetch가 아닌 git fetch를 사용합니다 ... pull에 대한 별칭이 있어야합니까?
Edmondo1984

1
나는 할 것이다. 이러한 방법으로 일반 옵션을 모두 가지고 pullfetch자신의 프 i 버전. 실제로, 나는 당신 fetch = fetch --prune이 별칭 섹션에 직접 쓸 수 있다고 생각 하므로 pull정리 된 가져 오기를 자동으로 사용할 것입니다.
ThanksForAllTheFish

2
내가 아는 한 fetch = fetch --prune작동하지 않으면 별칭으로 명령을 덮어 쓰지 못했습니다. 구 버전 (1.7.2.5)을 사용하고 있기 때문일 수 있습니다.
Uipko

3
git config documentation에서 : "스크립트 사용에 대한 혼란과 문제를 피하기 위해 기존 Git 명령을 숨기는 별칭은 무시됩니다."
Dewayne Christensen
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.