hyperskill - Git branches 영어 원문

이제, git에 우리가 저장한 프로젝트들의 복사본이 어떻게 구성되어지는지 알아 낼 시간입니다.

이번 주제에서는 branching에 익숙해 질 것이며, 이것이 왜 필요하고, 이것으로 무엇을 할 수 있는지 다룰 겁니다.


Branching - 브랜치 만들기


가끔 개발 모듈을 분리하거나, 이전 버전과 비교하여 대체 된 프로젝트 버전이 더 나은지 보기 위해 생성합니다.

몇몇 경우들에서, 원본 브로젝트의 복사본을 작업하는 것은 좋은 연습입니다.

이러한 복사는 branch라고 부릅니다.

브랜치들은 그들만의 history (히스토리:역사)를 가지고 있으며,

당신이 해당 브랜치를 병합하기로 결정 할 때 까지 다른 브랜치들로부터 변경 사항이 독립됩니다.

이런 방식을 가지는 데에는 여러 이유가 있습니다 :

  • 이미 작업중이며, 안정된 코드 버전이 저장되었으며,
  • 다른 프로그래머들에 의해 병렬적으로 다양하고 새로운 기능들이 개발되었을 때,
  • 개발자들은 codebase가 누군가의 변경 사항으로 인해 변경 될 리스크 없이 그들의 브랜치에서 작업 할 수 있습니다.
  • 의심이 가는 경우, 당신은 서로 다른 브랜치에서 같은 아이디어를 다른 구현으로 개발 할 수 있으며, 이를 비교할 수 있습니다.

다른 말로, branching은 하나의 프로젝트에서 버전을 나누는 능력이며, 이를 갈라서 작업한다는 것 입니다.


어떻게 branch를 생성 할 수 있을까요?

각각의 repository의 주요 branchmain 브랜치라고 부릅니다.

또다른 브랜치를 생성하기 위해서, branch <name> 명령어를 사용하세요 :

$ git branch new_branch

이는 새로운 브랜치를 생성 할 겁니다.

이것은 지금으로선, main branch의 정확한 복사본입니다.

당신은 이를 나중에 변경 할 수 있으며, main branch에 영향을 끼치지 않고 새로운 버전의 코드를 얻을 수 있습니다.

에러들과 실패들의 이벤트가 있다면,

main branch로 돌아가 작업을 계속하는 것을 고려하거나,

당신이 가질 수 있는 수의 브랜치의 제한이 없는 것 처럼 대신 또다른 브랜치를 생성 할 수 있습니다.


Switching between branches - 현재 branch 바꾸기


만약 git branch 명령어를 실행한다면, 두 가지 선택권이 있을 겁니다 :

$ git branch
new_branch
* main

Main 브랜치가 현재 브랜치이기 때문에, asterisk (별표) 로 표시되어 있습니다.

하지만 우리는 새로운 branchedit-readme를 작업하고 싶기 때문에, 이를 스위칭해야 합니다.

이를 위해서, git checkout 명령어를 사용합니다.

이 명령어는 단지 하나의 마라미터만을 갖습니다 : 존재하는 브랜치의 이름 중 하나

$ git checkout new_branch

Merging branches - 브랜치 병합하기


그래서, 당신은 새로운 브랜치로 스위칭했으므로, 새로운 브랜치에서 작업을 시작 할 수 있습니다.

예를 들어, 당신은 프로젝트 코드의 새로운 버전을 위해서 새로운 문서 파일을 add, 그리고 commit 할 수 있습니다.

$ git add new_documentation.txt
$ git commit -m "New documentation version complete!"

변경 사항을 완료했기 때문에, main 브랜치로 변경할 수 있습니다 :

$ git checkout main

지금 우리가 파일 관리자에서 우리의 프로젝트를 오픈한다면, new_documentation.txt 파일을 볼 수 없을 겁니다.

왜냐면 우리는 해당 텍스트 파일이 존재하지 않는 main branch로 돌아왔기 때문입니다.

main 브랜치에 새로운 버전에 있는 파일을 넣고 싶다면, git merge 명령어를 사용하세요.

Merging (병합) 은 그저 새로운 브랜치에서의 변경 사항을 프로젝트의 주요 버전에 적용시킨다는 의미와 같습니다.

$ git merge new_branch

만약 새로운 변경 사항들을 분리하여 저장하는 것이 이치에 맞지 않거나,

이미 main 의 일부가 되었다면, git branch -d 명령어를 사용하여 브랜치를 삭제 할 수 있습니다.

-d 옵션의 의미는 delete (삭제) 입니다 :

$ git branch -d new_branch

Resolving merge conflicts - 병합 과정의 문제 해결하기


브랜치들을 병합 할 때 갈등 (오류)가 일어 날 수 있습니다.

가장 흔한 사례는 하나의 파일이 두 번 commit 되었을 때 입니다.

이러한 버전 갈등 사례에 대한 것을 좀 더 자세히 봅시다.

예를 들어, main branche = mc^4 라는 내용이 있는 initial.file 을 가졌습니다.

게다가, 또 다른 두 개의 브랜치들이 있습니다.

첫 번째 브랜치는 e = mc^2 라는 내용을 가진 올바른 버전을 가진 파일이 있습니다.

두 번째 브랜치는 e = mc^3 라는 내용을 가진 틀린 버전을 가진 파일이 있습니다.


한 프로그래머가 merge 명령어를 사용해서 이러한 모든 브랜치들을 함께 병합하려고 시도합니다 :

git merge origin/fix-formula-wrong
git merge origin/fix-formula-right

결과로 이러한 에러 메세지를 수신받습니다 :

Auto-merging initial.file
CONFLICT (content): Merge conflict in initial.file
Automatic merge failed; fix conflicts and then commit the result

그리고 main branch내부의 파일에서는, 이미 e = mc^4 라는 내용이 이미 있습니다.

만약 두 브랜치가 이들의 모든 변경 사항을 취소한다면, 올바르지 않은 수학식 e = mc^4 을 다시 받게 될 겁니다.

결과적으로, 그들의 출력을 올바르게 하기 위해 수학 식을 수동으로 변경하고, 이를 commit (커밋) 한다는 것 입니다.


보다시피, 이러한 과정은 꽤 지루하고, 거대한 프로젝트들에서는 매우 어려울 수 있습니다.

많은 개발자들은 GUI clients to resolve conflicts 를 사용하는 것을 선호합니다.

하지만, 우리가 여기서 다른 간단한 예제에서는 중요하지 않습니다.


어쨋든 간에, 어떠한 것을 하기 이전에, 당신의 동료와 논의하는 것이 더 낫습니다.


Conclusion - 결론


이번 주제에서 배운 것들을 요약 해 봅시다 :

  • 원본 프로젝트를 복사한 것은 branch 라고 부릅니다.
    브랜치를 생성하기 위해 git branch <branch name> 명령어를 사용합니다.
  • 브랜치들 사이에서 변경하기 위해서, git checkout <branch name> 을 사용합니다.
  • 브랜치를 병합한다는 것은 하나의 브랜치에서 또다른 브랜치로 변경 사항을 적용한다는 것을 의미합니다.
    병합하기 위해 git merge <branch name> 명령어를 사용합니다.
  • 브랜치를 삭제하기 위해 git branch -d <branch name> 명령어를 사용합니다.
  • 브랜치들을 병합 (merge) 할 때, 갈등이 일어 날 겁니다.
    당신은 모든 행동을 주의 깊게 하며, 계속 추적하세요.
    그룹 프로젝트라면, 당신의 동료의 행동에도 추적해야 합니다.


words to remember


tedious : 지루한