Git Flow와 같은 병합 전략은 실제로 반 패턴입니까?


30

우리 회사는 Git을 사용하고 있으며 독특한 분기 방식을 사용하고 있습니다. 작업은 마스터에서 수행되며 지점은 릴리스를 위해 예약됩니다. 반복에서 수행 된 모든 작업이 지점으로 들어가는 한 제대로 작동하지만 중요한 생산 문제가 발생하면 작업이 두 지점 모두에서 이루어 지도록해야합니다.

최근에, 우리는 그 지점들과 함께 "재미"를 가지고 있습니다. 관리상의 골칫거리로 모든 작업이 모든 브랜치에 적용되도록하고 한 브랜치에서 수정 된 일부 버그는 누군가 지적 할 때까지 마스터로 만들지 않습니다.

나는 Git Flow 를 잠시 만났고, 그것이 문제에 대한 해결책이 될 것이라고 느꼈다. 코드는 릴리스까지 완전히 퍼지지 않거나 코드가 다시 내려갑니다. 유일하게 파악한 것은 내 리더가 이런 종류의 개발이 반 패턴 (anti-pattern)이었다고 언급했다.

나는 내가 동의한다는 것을 완전히 확신하지 못하고, 그것을 제기 한 이후로 일이 정상적으로 재개되었다. 최근에 우리는 이것으로 몇 가지 큰 어려움을 겪었습니다.

알고 싶습니다. 왜 이런 종류의 개발 체계가 반 패턴으로 보일까요? 정말 안티 패턴?


1
Ted Dziuba의 오래된 블로그 게시물에 있는 "규칙 3"섹션은 안티 패턴이 될 수있는 방법을 보여줍니다.
Isxek

5
IMO는 버전 제어에 대해 실제로 생각하는 시간이 많을수록 전체 사용자-> 도구 현상에서 처음부터 잘못되었습니다.
Erik Reppen 2013

@ErikReppen : 모든 사람의 마음을 버전 관리에서 빼고 모든 사람이 익숙해 질 수있는 프로세스를 갖기를 원합니다. 이런 식으로, 우리는 이것이 안티 패턴인지 아닌지에 대해 걱정할 필요가 없습니다.
Makoto

6
@Makoto KISS를 위반하는 것은 안티 패턴, IMO입니다. 이것은 VCS 파워 유저가 나를 미치게 만드는 경향이있는 곳입니다.
Erik Reppen 2013

6
"반 패턴"이라는 용어는 "모범 사례"와 비슷합니다. 사람들이 두뇌를 끌 수있는 변명으로 사용되기도합니다. 리드가 자신에게 어떤 경험이 있고 왜 나쁜지 명확하게 알 수 없다면이 개념을 받아들이지 마십시오.
Kyralessa 2013

답변:


30

그는 주로 모델의 피쳐 브랜치 측면을 참조합니다. 피처 브랜치는 오래 전에 브랜치가 몇 달 동안 지속되고 버전 관리 시스템이 병합되어 생명을 구할 수없는 반 패턴으로 선언되었습니다. 1 ~ 2 주간 지속되는 기능 분기는 특히 해당 기간 동안 기능 분기 에서 계속 병합하는 경우 문제가 훨씬 줄어 듭니다 develop. 그보다 훨씬 긴 것은 여전히 ​​권장되지 않습니다.

git flow의 기능 분기 측을 사용하지 않더라도 다른 부분은 깔끔하게 병합되고 변경 사항이 올바른 방향으로 전파되도록하는 데 유용합니다.


3
기능 브랜치에 대한 나의 경험 또는 우리가 수행 한 방식은 반복 이상으로 살 수 있다면 마음이 상할 수 있다는 것입니다. 규칙이 릴리스 좋을 것 병합의 상심 완화하기 전에 모든 기능은 반복에 병합해야한다는 -와 소년, 우리가 그 뒤에 몇 가지 심각한 상심했다 ... 한
마코토

6
내 경험은 최근 마스터와 합병을 유지하고 적절하게 개발하는 한 현지 물건을 오래 머물 수 있다는 것입니다.
Jan Hudec

2
@JaHudec ... 또는 어떤 식 으로든 충돌하는 두 가지가있을 때까지. 당신은 항상 그 일에 대한 개요를 가지고 있어야합니다 ...
johannes

5
Martin Fowler의 참조 에 따르면 약간의 내용을 읽고 있는 것은 지속적인 통합 흐름에서 수행되는 기능 분기가 대부분의 사람들이 생각하는 것보다 작은 비트로 수행되는 경우 해결할 수 있음을 나타냅니다. 따라서 기능 브랜치에서 살아남는 시간이 적합 해 보이면 2 주도 안됩니다. 그러나 피처 브랜치 자체가 어떻게 안티 패턴인지는 알 수 없습니다.
Makoto

3
네가 옳아. 그것들은 합쳐지지 않고 너무 오래 살 때 단지 반 패턴입니다. 때때로 사람들은 근본적인 이유를 기억하지 못할 때 여전히 아이디어에 반대합니다.
Karl Bielefeldt

21

병합은 재밌는 일입니다. 덜 자주 수행 될수록 더 어려워 질수록 더 어려워 질수록 더 많은 사람들이 두려워 할 것입니다.

해결책은 가지가 너무 많이 벗어나거나 가지를 사용하지 않는 것입니다.

사람들이 이것을 이해한다면 아마도 병합에 많은 문제가 없을 것입니다. 그렇지 않다면 – 교육이 없으면 가지가 좋은 생각이 아닐 수도 있습니다.


1
아냐, 가지를 사용하지 않는 것은 스타터가 아닙니다. 다른 주요 문제는 동일한 코드의 두 곳에서 작업을 수행 할 수 있다는 점입니다. 따라서이를 완화하기 위해 무언가를 할 수 있기를 바랍니다.
Makoto

12
@makoto, 종종 코드에서 것들을 분리하면 충돌이 덜 자주 발생합니다. 기능을 기능 / 클래스로 명확하게 분리하거나 모듈 간 문서화되지 않은 가정을 피하는 것이 더 중요 할 수 있습니다. 그런 다음 변경 사항이 더 현지화됩니다.
maxim1000

1
@ maxim1000 동의합니다. "VCS는 모듈 식 [분리 된] 아키텍처에 대한 가난한 사람의 대안입니다"
8DH

첫 번째 단락에 +1 그리고 교육없이 gitflow와 같은 것은 막 다른 골목입니다
daitangio
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.