etc./StackOverFlow

git 브랜치 이름 지정에 일반적으로 사용되는 몇 가지 예는 무엇입니까? [닫은]

청렴결백한 만능 재주꾼 2023. 4. 26. 12:46
반응형

질문자 :skiphoppy


저는 지금 몇 달 동안 그룹의 CVS 저장소와 상호 작용하는 로컬 git 저장소를 사용해 왔습니다. 나는 거의 신경질적인 수의 가지를 만들었고, 대부분은 고맙게도 내 트렁크에 다시 병합되었습니다. 그러나 네이밍이 문제가 되기 시작했습니다. 간단한 레이블로 쉽게 이름을 지정할 수 있는 작업이 있지만 각각 고유한 분기 및 병합 상황을 포함하는 3단계로 수행하는 경우 매번 분기 이름을 반복할 수 있지만 이는 히스토리를 약간 혼란스럽게 만듭니다. 각 단계에 대한 별도의 설명과 함께 이름을 더 구체적으로 지정하면 분기 이름이 길고 다루기 어려워지기 시작합니다.

여기에서 이전 스레드를 살펴보고 이름에 /가 포함된 분기 이름 지정을 시작할 수 있다는 것을 배웠습니다. 즉, topic/task 또는 이와 유사한 것입니다. 나는 그것을 시작하고 그것이 일을 더 잘 정리하는 데 도움이되는지 볼 수 있습니다.

git 브랜치 이름 지정에 대한 모범 사례는 무엇입니까?

편집: 아무도 실제로 명명 규칙을 제안하지 않았습니다. 작업이 끝나면 분기를 삭제합니다. 경영진이 내 우선 순위를 지속적으로 조정하기 때문에 주변에 몇 개가 있습니다. :) 작업에 하나 이상의 분기가 필요한 이유에 대한 예로 작업의 첫 번째 개별 마일스톤을 그룹의 CVS 저장소에 커밋해야 한다고 가정합니다. 그 시점에서 CVS와의 불완전한 상호 작용으로 인해 해당 커밋을 수행한 다음 해당 분기를 종료합니다. (그 시점에서 동일한 분기를 계속 사용하려고 하면 CVS와 상호 작용하는 이상함을 너무 많이 보았습니다.)



다음은 내가 사용하는 몇 가지 분기 명명 규칙과 그 이유입니다.

분기 명명 규칙

  1. 분기 이름의 시작 부분에 그룹화 토큰(단어)을 사용하십시오.
  2. 짧은 리드 토큰을 정의하고 사용하여 워크플로에 의미 있는 방식으로 분기를 구분하십시오.
  3. 슬래시를 사용하여 분기 이름의 일부를 구분하십시오.
  4. 맨 숫자를 선행 부품으로 사용하지 마십시오.
  5. 수명이 긴 분기에는 설명이 포함된 긴 이름을 사용하지 마십시오.

그룹 토큰

지점 이름 앞에 "그룹화" 토큰을 사용하십시오.

 group1/foo group2/foo group1/bar group2/bar group3/bar group1/baz

그룹 이름은 워크플로에 맞게 원하는 대로 지정할 수 있습니다. 나는 짧은 명사를 사용하는 것을 좋아합니다. 더 명확하게 읽으려면 계속 읽으십시오.

짧고 잘 정의된 토큰

모든 지점 이름에 너무 많은 노이즈를 추가하지 않도록 짧은 토큰을 선택하십시오. 나는 이것을 사용한다:

 wip Works in progress; stuff I know won't be finished soon feat Feature I'm adding or expanding bug Bug fix or experiment junk Throwaway branch created to experiment

이러한 각 토큰을 사용하여 각 분기가 속한 워크플로 부분을 알 수 있습니다.

변경 주기에 따라 여러 분기가 있는 것처럼 들립니다. 나는 당신의 주기가 무엇인지 모르지만 '신규', '테스트' 및 '검증'된 주기라고 가정해 보겠습니다. 항상 같은 철자가 같은 이러한 태그의 축약된 버전으로 분기의 이름을 지정하여 그룹화하고 현재 어느 단계에 있는지 상기시킬 수 있습니다.

 new/frabnotz new/foo new/bar test/foo test/frabnotz ver/foo

각 단계에 도달한 분기를 빠르게 알 수 있으며 Git의 패턴 일치 옵션을 사용하여 쉽게 그룹화할 수 있습니다.

 $ git branch --list "test/*" test/foo test/frabnotz $ git branch --list "*/foo" new/foo test/foo ver/foo $ gitk --branches="*/foo"

슬래시를 사용하여 부품 분리

분기 이름에 원하는 구분 기호를 대부분 사용할 수 있지만 슬래시가 가장 유연합니다. 대시나 점을 사용하는 것이 좋습니다. 그러나 슬래시를 사용하면 원격으로 푸시하거나 가져올 때 분기 이름을 변경할 수 있습니다.

 $ git push origin 'refs/heads/feature/*:refs/heads/phord/feat/*' $ git push origin 'refs/heads/bug/*:refs/heads/review/bugfix/*'

나에게 슬래시는 내 셸의 탭 확장(명령 완성)에도 더 잘 작동합니다. 내가 구성한 방식으로 파트의 첫 번째 문자를 입력하고 TAB 키를 눌러 다른 하위 파트가 있는 분기를 검색할 수 있습니다. 그런 다음 Zsh는 내가 입력한 토큰의 일부와 일치하는 분기 목록을 제공합니다. 이는 포함된 토큰뿐만 아니라 이전 토큰에도 적용됩니다.

 $ git checkout new<TAB> Menu: new/frabnotz new/foo new/bar $ git checkout foo<TAB> Menu: new/foo test/foo ver/foo

(Zshell은 명령 완성에 대해 매우 구성 가능하며 대시, 밑줄 또는 점을 같은 방식으로 처리하도록 구성할 수도 있습니다. 하지만 저는 그렇게 하지 않기로 선택했습니다.)

또한 다음과 같이 많은 git 명령에서 분기를 검색할 수 있습니다.

 git branch --list "feature/*" git log --graph --oneline --decorate --branches="feature/*" gitk --branches="feature/*"

주의 사항: Slipp이 주석에서 지적했듯이 슬래시는 문제를 일으킬 수 있습니다. 분기는 경로로 구현되므로 "foo"라는 분기와 "foo/bar"라는 다른 분기를 가질 수 없습니다. 이것은 새로운 사용자에게 혼란을 줄 수 있습니다.

맨 숫자를 사용하지 마십시오.

분기 명명 체계의 일부로 베어 숫자(또는 16진수)를 사용하지 마십시오. 참조 이름의 탭 확장 내부에서 git은 숫자가 분기 이름 대신 sha-1의 일부라고 결정할 수 있습니다. 예를 들어, 내 이슈 트래커는 십진수로 버그의 이름을 지정합니다. 혼동을 피하기 위해 관련 분기의 이름을 nnnnn이 아니라 CRnnnnn으로 지정합니다.

 $ git checkout CR15032<TAB> Menu: fix/CR15032 test/CR15032

15032만 확장하려고 하면 git은 내가 SHA-1 또는 분기 이름을 검색할지 여부를 확신할 수 없으며 선택 항목이 다소 제한됩니다.

설명이 긴 이름은 피하세요.

긴 브랜치 이름은 브랜치 목록을 볼 때 매우 유용할 수 있습니다. 그러나 분기 이름이 대부분의 단일 행을 먹고 로그의 보이는 부분을 축약할 수 있으므로 장식된 한 줄 로그를 볼 때 방해가 될 수 있습니다.

반면에 손으로 습관적으로 다시 작성하지 않으면 긴 분기 이름이 "커밋 병합"에 더 도움이 될 수 있습니다. 기본 병합 커밋 메시지는 Merge branch 'branch-name' 입니다. 당신은 더 도움이 병합 메시지로 표시하도록 찾을 수 있습니다 Merge branch 'fix/CR15032/crash-when-unformatted-disk-inserted' 대신 단지 Merge branch 'fix/CR15032' .


phord

Vincent Driessen의 성공적인 Git 분기 모델 에는 좋은 제안이 있습니다. 사진은 아래에 있습니다. 이 분기 모델이 마음 에 든다면 git에 대한 흐름 확장을 고려하십시오. 다른 사람들은 흐름에 대해 논평했습니다.

Driessen의 모델에는 다음이 포함됩니다.

  • 릴리스에만 사용되는 마스터 분기입니다. 일반적인 이름 master .

  • 해당 분기에서 "개발" 분기입니다. 대부분의 메인 라인 작업에 사용되는 것입니다. 일반적으로 이름이 develop .

  • 개발 분기의 여러 기능 분기. 기능의 이름을 기반으로 하는 이름입니다. 이들은 마스터 또는 릴리스 분기가 아닌 개발로 다시 병합됩니다.

  • 버그 수정만 있고 새로운 기능은 없는 후보 릴리스를 보유하는 릴리스 분기입니다. 일반적인 이름 rc1.1 .

핫픽스는 마스터에서 오는 변경 사항에 대한 단기 분기이며 개발 분기가 관여하지 않고 마스터로 이동합니다.

여기에 이미지 설명 입력


Brian Carlton

나는 내가 본 다른 구성표와 내가 사용하는 도구를 기반으로 혼합 및 일치했습니다.
따라서 완성된 지점 이름은 다음과 같습니다.

이름/기능/문제 추적기 번호/짧은 설명

다음과 같이 번역됩니다.

mike/blogs/RSSI-12/logo-fix

쉽게 구성할 수 있도록 SourceTree에서 폴더로 해석되기 때문에 해당 부분은 슬래시로 구분됩니다. 문제 추적에 Jira를 사용하므로 번호를 포함하면 시스템에서 더 쉽게 조회할 수 있습니다. 해당 번호를 포함하면 pull 요청을 제출하려고 할 때 Github 내에서 해당 문제를 찾으려고 할 때 검색할 수 있습니다.


MikeG

내 개인적인 취향은 토픽 브랜치를 마친 후 브랜치 이름을 삭제하는 것입니다.

브랜치의 의미를 설명하기 위해 브랜치 이름을 사용하는 대신, 해당 브랜치의 첫 번째 커밋에서 커밋 메시지의 제목 줄을 "Branch:"로 시작하고 제목이 다음과 같은 경우 메시지 본문에 추가 설명을 포함합니다. 나에게 충분한 공간을주지 않습니다.

내가 사용하는 브랜치 이름은 작업하는 동안 토픽 브랜치를 참조하기 위한 핸들입니다. 토픽 브랜치에 대한 작업이 끝나면 브랜치 이름을 지우고 나중에 참조할 수 있도록 커밋에 태그를 지정하기도 합니다.

git branch 의 출력을 더욱 유용하게 만듭니다. 모든 브랜치가 아니라 수명이 긴 브랜치와 활성 토픽 브랜치만 나열합니다.


Aristotle Pagaltzis

모든 작업에 대해 3개의 분기/병합이 필요한 이유는 무엇입니까? 그것에 대해 더 설명할 수 있습니까?

버그 추적 시스템을 사용하는 경우 버그 번호를 분기 이름의 일부로 사용할 수 있습니다. "ResizeWindow-43523" 과 같이 사람이 읽을 수 있도록 짧고 설명적인 단어를 접두사로 사용할 수 있습니다. 또한 관련 버그를 조회할 수 있으므로 분기를 정리할 때 작업을 더 쉽게 수행할 수 있습니다. 이것은 일반적으로 내 지점의 이름을 지정하는 방법입니다.

이러한 분기는 결국 마스터로 다시 병합되므로 병합 후 안전하게 삭제해야 합니다. --squash 와 병합하지 않는 한 분기의 전체 기록은 필요할 때 계속 존재합니다.


farktronix

이제 Git 2.0의 일부인 커밋 e703d7 또는 커밋 b6c2a0d (2014년 3월)에 설명된 것처럼 다른 명명 규칙(브랜치에 적용할 수 있음)을 찾을 수 있습니다.

"공백을 사용해야 할 때 대시를 사용하십시오"는 공백을 사용하면 안된다는 이상한 표현입니다.
명령줄 설명에 대시 다중 단어를 사용하는 것이 더 일반적이기 때문에 이러한 위치에 공백을 사용하고 싶지도 않습니다.

브랜치 이름에는 공백이 있을 수 없습니다(" 브랜치 이름에 잘못된 문자는 무엇입니까? " 및 git check-ref-format 매뉴얼 페이지 참조 ).

따라서 다중 단어 표현식으로 표시되는 모든 분기 이름에 대해 ' - '(대시)를 구분 기호로 사용하는 것이 좋습니다.


VonC

farktronix의 제안에 따라 mercurial에서 유사한 Jira 티켓 번호를 사용하고 있으며 git 분기에 계속 사용할 계획입니다. 하지만 티켓 번호 자체가 아마 충분히 독특하지 않을까 생각합니다. farktronix가 언급한 것처럼 분기 이름에 설명적인 단어가 있으면 도움이 될 수 있지만 분기 간에 자주 전환하는 경우 입력을 덜 원할 것입니다. 그런 다음 분기 이름을 알아야 하는 경우 모르는 경우 Jira에서 티켓의 관련 키워드를 찾습니다. 또한 각 댓글에 티켓 번호를 포함해야 합니다.

분기가 버전을 나타내는 경우 일반적인 규칙은 분기 이름에 xxx(예: "1.0.0") 형식을 사용하고 태그 이름에 vx.xx(예: "v1.0.0")를 사용하는 것입니다(충돌 방지). . 참조: is-the-an-standard-naming-convention-for-git-tags


Gary S. Weaver

출처 : http:www.stackoverflow.com/questions/273695/what-are-some-examples-of-commonly-used-practices-for-naming-git-branches

반응형