연습 - Bob의 분기 병합

완료됨

Alice가 웹 사이트의 CSS에 대한 작업을 진행하는 동안 Bob은 집에서 작업하고 있기 때문에 Alice가 수행하는 작업을 알지 못합니다. 둘 모두 분기를 사용하고 있기 때문에 괜찮습니다! Bob은 자신의 작업을 약간 변경하기로 결정합니다.

Bob을 위한 분기 만들기

  1. Bob 디렉터리로 돌아간 후 다음 명령을 실행하여 add-cat이라는 분기를 만듭니다. 인기 있는 checkout -b 옵션을 사용하여 단일 명령에서 분기를 만들고 그 분기로 전환합니다.

    cd ../Bob
    git checkout -b add-cat
    
    
  2. 일부 웹 사이트 리소스가 들어 있는 zip 파일을 다운로드합니다. 그런 다음 리소스 파일의 압축을 풉니다.

    wget https://github.com/MicrosoftDocs/mslearn-branch-merge-git/raw/main/git-resources.zip
    unzip git-resources.zip
    
    
  3. 이제 bobcat2-317x240.jpg 파일을 Bob의 Assets 디렉터리로 이동합니다. 다른 파일을 삭제합니다. 파일을 다운로드한 후 나중에 다시 사용할 것입니다.

    mv bobcat2-317x240.jpg Assets/bobcat2-317x240.jpg
    rm git-resources.zip
    rm bombay-cat-180x240.jpg
    
    
  4. 이제 index.html 파일을 열고 ‘Eventually we will put cat pictures here’라는 줄을 다음 줄로 바꿉니다.

    <img src="Assets/bobcat2-317x240.jpg" />
    
  5. 파일을 저장하고 편집기를 닫습니다.

  6. 이제 Bob의 add-cat 분기에서 두 가지를 변경했습니다. 즉, 파일 하나를 추가하고 다른 파일을 수정했습니다. git status를 실행하여 변경 내용을 재확인합니다.

    git status
    
    
  7. 다음 명령을 실행하여 Assets 디렉터리의 새 파일을 인덱스에 추가하고 모든 변경 사항을 커밋합니다.

    git add .
    git commit -a -m "Add picture of Bob's cat"
    
    
  8. 이제 Bob은 Alice가 앞서 수행한 것과 동일한 작업을 수행합니다. Bob은 다시 main 분기로 전환하고 끌어오기를 실행하여 변경된 내용이 있는지 확인합니다.

    git checkout main
    git pull
    
    
  9. 출력을 확인합니다. 이번에는 출력에 변경 사항이 공유 리포지토리의 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(-)
    
  10. 다음으로 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을 열면 다음 메시지가 표시됩니다.

Screenshot that shows cats on the website.

다음 단원에서는 둘 이상의 개발자가 변경한 내용이 겹치는 경우에 발생하는 병합 충돌을 해결하는 방법에 대해 알아봅니다.