2016-10-04 5 views
8

git fetch --prune을 사용하면 원격 시스템의 분기가 삭제 될 때 로컬 원격 추적 분기를 삭제합니다. 합니다 ... 다음--prune 옵션을 항상 사용하도록 'git fetch'를 설정하지 않아도되는 이유가 있습니까?

git config --global fetch.prune true 

사용하여 true로 remote.origin.prune 설정 ... 항상 암시 적으로 --prune 옵션을 사용 가져 오기 명령을 사용합니다.

내 그룹의 일부 개발자는 잘 모르는 사람들을 위해 모범 사례/소개를 함께 모으고 있습니다. 나는 그들이 그렇게하도록 조언하기 전에 이것이 위험한 행동이 아니라는 것을 확실히 알고 싶다. 적어도 약간의 사고가있는 경우 조심해야 할 것을 머리 숙여주세요.

로컬 (비 원격) 브랜치를 삭제하지 않으므로 파괴적인 작업 인 것 같지 않습니다. git fetch --prune 또는 git remote prune을 주기적으로 지정하지 않고도 더 이상 사용하지 않는 리모컨을 구축하지 않는 것이 좋습니다.

이것이 사실이라면 왜 이것이 git의 기본 동작이 아닌가요?

+2

브랜치를 제거하면 동료가 실수로 브랜치를 삭제할 때 백업으로 사용할 수 없습니다. – choroba

+0

로컬 브랜치가 중요한 분기 인 경우 백업에 충분하지 않습니까? 왜 리모콘을 원하니? 나는 당신이 리모컨을 삭제할 때 바보 같은 실수를하는 경우에 백업을 위해 다른 개발자들에게 의존해야한다고 생각하지 않는다. – timfoil

+0

브랜치를 가지 치기 (pruning)하면 어떤 이점이 있습니까? – choroba

답변

7

근본적으로 위험한 것은 아니며, 내 자신의 --global 설정으로 설정하고 싶은 유혹을 받았지만, 나는 결코 가지고 있지 않습니다. 주로 나에게도 상대적으로 작은 가치가 있기 때문입니다. 당신이 참고로 지점 zorg가 더 이상 origin에 존재하면 1

, 의도는, 본질적으로, origin/zorg를 제거합니다. 이것이 자신의 zorg에 직접적인 영향을 미치지 않기 때문에, 당신이 전혀 가지고 있지 않다면, 그것은 일반적으로 해가 없으며, 원격 추적 브랜치에 대한 당신의 견해를 싫어합니다. 유일한 두 가지 단점은 다음과 같습니다

  1. 사람 실수로 상류 저장소에 zorg을 삭제하고 모든 다운 스트림 복사가 origin/zorg 치기 경우의 ID를 잃게 커밋 (그리고 아마도 많은 사람들이 자신을 커밋)이 해당 업스트림 저장소에 zorg의 팁이있었습니다. 그래서 몇 가지 실수의 효과를 확대합니다. (물론 업스트림 저장소가 중요하다면 어쨌든 백업을 만들어야 할 것입니다. 그러나 복제본을 백업으로 사용하는 경우 자동 잘라내 기가 단점을 가지고 있습니다. 물론 이러한 경우에 자동 프룬을 항상 비활성화 할 수 있습니다) 백업.)

  2. 는이 origin/zorg를 추적 자신의 zorg을 할 가정, 상류 zorg는 목적에 (이 시간이 삭제됩니다. origin/zorg 앞에 얼마나 많은 커밋을했는지 알려주는 정보는 git status 정보를 제공하는 origin/zorg입니다. 이제 과 같은 커밋을 자신의 브랜치 중 하나에 커밋하지 않고 업스트림하기로 바꾼다고 가정합니다. 이 경우 자신의 origin/zorg을 자동으로 정리 (prune)하면 자신의 커밋과 이미 업스트림에 있던 커밋을 구분하기가 어렵습니다.

주 당신이 어떤 커밋을 잃지 말고 경우 2 인치 당신이 잃는 것은 예를 들어 의 zorg에있는 의 마지막 3 개가 현재는 origin/zorg에 있었던 그 이전의 몇 가지와 함께 자신의 것이 었음을 알리는 기능입니다.


1는 수년에 걸쳐, 가지 치기 코드는 때때로 다소 대부분 치기 실패의 측면에서, 파손되었습니다. 이것은 Git 개발자 자신이 아마 많이 사용하지 않을 것임을 의미합니다. 그러나 이제는 Git의 내부 테스트 스위트가 새 릴리스에서 올바르게 제거되는 지 확인하기위한 테스트가 있기 때문에 상황이 나아졌습니다. 그래서 "낮은 가치"와 "과거의 불충분 한 테스트"사이에, 적어도 당시에는 그것을 설정하지 않을 충분한 이유가있었습니다.

+0

나는 목록에 두 번째 이유로 특정 커밋을 다른 지사로 옮기는 것만으로 혼란스러워합니다. 커밋 중 하나가 이전에 만들어진 커밋 (업스트림)에 의존하는 경우 해당 변경/커밋이 주행 중 함께 고정되지 않아야합니까? – timfoil

+1

@timfoil : 만약에 당신이 * 의존하고 있다면 - 아마도 누군가가 상류 지점을 지우는 이유는 그 커밋이 망가져서 사용되어서는 안되며 어쩌면 당신은 그들에 의존하지 않을 수도 있습니다. . – torek

+0

git 커밋은 연결된 목록/트리 종류의 구조로 생각할 수 있으므로 잘못된 커밋 이후 작성된 커밋은 서로 의존 할 것이라고 생각했습니다. 그러나 _depend_ 이탤릭체로되어 있기 때문에 커밋은 항상 이전 커밋 (다른 파일을 편집하거나 같은 파일의 다른 부분이 독립적 커밋이 될 수 있음)에 의존하지 않는다고 생각하는 것 같습니다. 임의 분기의 끝을 다른 임의의 것으로 이동할 수 있습니다 분기? 어떤 명령으로이 작업을 수행 할 수 있습니까? 나는 나쁜 커밋을 포함하므로 병합하지 않는 것으로 추측합니다. 어쩌면 다시베이스? – timfoil