TIL(Today I Learned)

11월 3일(화)

학습내용

  • Git
    • 로컬에서 깃을 사용할 때 충돌 시나리오를 구상해서 재현해보고 이를 해결해보기.
    • 리모트 저장소를 통해 협업시 발생할 수 있는 충돌 시나리오를 구상하여 이를 재현하고 해결하기.
    • 야곰 저장소에 풀-리퀘스트 보내기.
  • 팀 프로젝트 진행 규칙 정하기

문제점/고민한점

  • Git에서 충돌이란 무엇인가?
  • Merge는 정확히 무엇을 병합한다는 것일까?
  • 로컬에서의 충돌 시나리오는 무엇이 있을까?
  • 리모트에서의 충돌 시나리오는 무엇이 있을까?
  • 내 저장소에서 ‘Git branch -t origin/닉네임’ 을 실행 했을 때, 왜 fatal 에러가 발생하는가?

해결방법

  • Git에서 충돌이란 무엇인가?
    • 충돌은 다음 커밋을 생성할 때, 어떤 파일을 다음 커밋에 유지할지 Git이 결정하지 못하는 것이라고 이해하였다.
    • 예를 들어, a.txt을 branch1에는 ‘b’라는 내용을 branch2에서 ‘c’라는 내용의 각각 다른 내용을 추가한 상태라고 가정한다. branch1에서 branch2를 병합하려고 하면, a.txt의 branch1과 branch2 내용이 다르기 때문에 충돌이 발생한다.
    • 병합할 때 충돌이 발생하면, 충돌한 지점(충돌이 발생한 파일)에 각각의 branch의 다른 내용들이 모두 들어간다. ‘«« HEAD’, ‘=====’ , ‘»»> Branch_이름’의 기호를 사용하여 각각의 branch 내용이 모두 들어가며, 사용자는 이 중에서 필요 없는 내용을 삭제하여 충돌을 해결할 수 있다.
  • Merge는 정확히 무엇을 병합한다는 것일까?
    • 서로 다른 branch(파일 목록 및 파일 내용@/ 버전)을 합치는 것
    • 변경 이력이 다른 두 파일의 내용을 하나의 파일로 합치는 것. 즉, 두 브렌치에서 어떤 파일의 내용을 각각 다르게 했을 때 달라진 내용을 모두 합치는 것.
  • 로컬에서의 충돌 시나리오는 무엇이 있을까?
    • 하나의 파일에 서로 다른 두 브렌치에서 각각 다른 내용을 추가한 후 두 브렌치를 병합할 경우, 충돌이 발생.
  • 리모트에서의 충돌 시나리오는 무엇이 있을까?
    • 여러 프로그래머가 내용이 다른 커밋을 리모트로 푸쉬할 경우, 충돌이 발생.
  • 내 저장소에서 ‘Git checkout -t origin/닉네임’ 을 실행 했을 때, 왜 fatal 에러가 발생하는가?
    • 일단 이 명령이 무엇을 의미하고 왜 사용하는 것인지에 대한 이해가 부족하였음.
    • 내 저장소에 ‘origin/bam’이라는 tracking 브렌치를 생성한 적이 없는데 이를 체크아웃(브렌치 변경)했기 때문에 에러 발생.
    • 트레킹 브렌치는 로컬에서 리모트 브렌치를 나타내는 로컬 브렌치
      • 트레킹 브렌치란, 나의 로컬에서 리모트 브렌치의 상태(위치)를 나타내기 위해 있는 브렌치