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 fetch및 git 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
나는 할 것이다. 이러한 방법으로 일반 옵션을 모두 가지고 pull와 fetch자신의 프 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.