연습 - Bob의 분기 병합
Alice가 웹 사이트의 CSS에 대한 작업을 진행하는 동안 Bob은 집에서 작업하고 있기 때문에 Alice가 수행하는 작업을 알지 못합니다. 둘 모두 분기를 사용하고 있기 때문에 괜찮습니다! Bob은 자신의 작업을 약간 변경하기로 결정합니다.
Bob을 위한 분기 만들기
Bob 디렉터리로 돌아간 후 다음 명령을 실행하여
add-cat
이라는 분기를 만듭니다. 인기 있는checkout -b
옵션을 사용하여 단일 명령에서 분기를 만들고 그 분기로 전환합니다.cd ../Bob git checkout -b add-cat
일부 웹 사이트 리소스가 들어 있는 zip 파일을 다운로드합니다. 그런 다음 리소스 파일의 압축을 풉니다.
wget https://github.com/MicrosoftDocs/mslearn-branch-merge-git/raw/main/git-resources.zip unzip git-resources.zip
이제 bobcat2-317x240.jpg 파일을 Bob의 Assets 디렉터리로 이동합니다. 다른 파일을 삭제합니다. 파일을 다운로드한 후 나중에 다시 사용할 것입니다.
mv bobcat2-317x240.jpg Assets/bobcat2-317x240.jpg rm git-resources.zip rm bombay-cat-180x240.jpg
이제 index.html 파일을 열고 ‘Eventually we will put cat pictures here’라는 줄을 다음 줄로 바꿉니다.
<img src="Assets/bobcat2-317x240.jpg" />
파일을 저장하고 편집기를 닫습니다.
이제 Bob의
add-cat
분기에서 두 가지를 변경했습니다. 즉, 파일 하나를 추가하고 다른 파일을 수정했습니다.git status
를 실행하여 변경 내용을 재확인합니다.git status
다음 명령을 실행하여 Assets 디렉터리의 새 파일을 인덱스에 추가하고 모든 변경 사항을 커밋합니다.
git add . git commit -a -m "Add picture of Bob's cat"
이제 Bob은 Alice가 앞서 수행한 것과 동일한 작업을 수행합니다. Bob은 다시
main
분기로 전환하고 끌어오기를 실행하여 변경된 내용이 있는지 확인합니다.git checkout main git pull
출력을 확인합니다. 이번에는 출력에 변경 사항이 공유 리포지토리의
main
에 ‘적용되었음’이 표시됩니다(Alice의 푸시 결과). 또한 공유 리포지토리의main
에서 끌어온 변경 내용이 Bob 리포지토리의main
와 병합되었음도 표시됩니다.remote: Counting objects: 4, done. remote: Compressing objects: 100% (3/3), done. remote: Total 4 (delta 1), reused 0 (delta 0) Unpacking objects: 100% (4/4), done. From D:/Labs/Git/Bob/../Shared e81ae09..1d2bfea main -> origin/main Updating e81ae09..1d2bfea Fast-forward Assets/site.css | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
다음으로 Bob은 자신의 분기를
main
분기에 병합하므로 리포지토리의main
에는 Bob의 변경 내용 ‘및’ Alice의 변경 내용이 적용됩니다. 그런 다음 Bob은 자신의 컴퓨터에 있는main
을 공유 리포지토리의main
분기로 푸시합니다.git merge add-cat --no-edit git push
Bob은 이미 main
이 변경된 것을 알고 있으므로 --ff-only
플래그를 사용하지 않았습니다. 빠른 진행 전용 병합을 사용했다면 실패했을 것입니다.
리포지토리 동기화
이 시점에서 Bob에게는 최신 리포지토리가 있지만 Alice는 그렇지 않습니다. Alice는 공유 리포지토리에서 git pull
을 수행하여 사이트의 최신이자 최고의 버전이 있는지 확인해야 합니다.
다음 명령을 실행하여 공유 리포지토리로 Alice의 리포지토리를 동기화합니다.
cd ../Alice
git pull
잠시 시간을 내서 Alice의 리포지토리 및 Bob의 리포지토리가 동기화되었는지 확인합니다. 각 리포지토리에는 Assets 디렉터리에 JPG 파일 및 index.html에서 선언된 <img>
요소가 있어야 합니다. 각 리포지토리의 Assets 폴더에 있는 site.css에는 cat이라는 CSS 스타일을 정의하는 줄이 포함되어야 합니다. 이 스타일은 변경되었을 때 Alice가 추가했습니다.
브라우저에서 index.html을 열면 다음 메시지가 표시됩니다.
다음 단원에서는 둘 이상의 개발자가 변경한 내용이 겹치는 경우에 발생하는 병합 충돌을 해결하는 방법에 대해 알아봅니다.