Git Push와 README

akfvh·2022년 8월 11일
0

학습 계기

동아리 지원을 위해 처음으로 제대로 사용할 깃헙 레포지토리를 만들었다.
간단한 프로젝트를 올리기 위해 git 명령어를 통해 init, add, commit, 그리고 push까지 했을 때, 깃헙 레포지토리에 바로 반영되지 않고 compare&pull request가 떴다.

기존에 간단한 실습으로 로컬 레포지토리 생성 및 push를 했을 때는 분명 깃헙 레포지토리에 그대로 반영이 됐었는데 의외의 결과에 마주하게 됐고, 바로 구글링을 시작했다.

학습 내용


원인

첫 커밋이 아니였다..?

git push origin master 명령어 오류를 겪은 한 블로그에서 그 원인과 해결방법을 찾을 수 있었다. 해당 작성자가 참조한 stackcoverflow페이지를 직접 들어가봤다.

깃헙 레포지토리 생성 시 체크할 수 있는 initialize repo with a README 옵션과 관련된 해당 문제는 정리하자면 다음과 같다:

  • 해당 옵션 체크 시 발생하는 README 생성은 커밋으로 간주된다.

  • 따라서 git init을 통해 생성한 로컬 레포지토리에서 생성한 '첫 커밋'은 연결된 깃헙 레포지토리의 README생성으로 생긴 커밋과 충돌하게 된다.

  • 이는 두 레포지토리 간 push 혹은 pull시 에러를 야기한다

  • 커밋 ID, 커밋 히스토리와 관련된 해당 충돌에 대한 내용은 여기 자세히 나와있다.

  • 커밋과 관련된 이슈이기에, 단순히 깃헙 레포지토리에서 README파일을 직접 다운받는 것으로 해결이 불가능하다.

    • 즉, (1) 정상적으로 add 와 push를 통해 저장소의 content와 커밋이 동기화되어있는 로컬-원격 저장소는 같다고 보지만, (2) 단순히 두 저장소의 content는 같지만 커밋 ID가 다른, 즉 diverged된 커밋 히스토리를 가진 두 로컬-원격 저장소는 다르다고 본다는 것이다.

git을 사용하는 버전관리 자체에 경험이 없어서 해당 내용을 완전히 이해하지는 못했지만, 대략 커밋과 관련된 로컬-원격 저장소 간 동기화 문제라고 요약할 수 있을 것 같다.

해결

  1. 로컬 레포지토리 O | 깃헙 레포지토리 X
    • 깃헙 저장소 생성 시 README 없이 생성.
  1. 로컬 레포지토리 X | README 있는 깃헙 레포지토리 O
    1) git clone으로 원격 저장소 복제
    2) 로컬 저장소에서 수정
    3) commit, push

  2. 로컬 레포지토리 O | README 있는 깃헙 레포지토리 O

    • 강제 PUSH
    git push -f origin master
    • pull and push
    git pull origin master
        
    >>  make changes  <<
        
    git push --set-upstream origin master

* 흔히 프로젝트 시 2번 방법을 많이 사용한다고 한다. (git init을 사용하지 않는 방법)

* 3번의 두번째 방법 같은 경우, branch와 관련된 주의할 점이 있었다. 원 글 참고

마무리

참조한 글들에 따르면 나는 에러가 날 상황이였는데도 오히려, 에러 없이 push가 되어 구글링 하는데 오래 걸렸다. 왜 에러가 나지 않았는 지는 아직 모르겠다. 읽은 답변들 중 branch와 관련된 내용도 있었는데, 이는 나중에 다루기로 한다.

해당 내용을 공부하며, gitgithub도 틈틈이 공부해둬야겠다고 느꼈다.

+) 관련해서 추가로 공부할 내용들

  • git 명령어. 특히 옵션
  • branch 개념, version control, upstream
  • 저장소와 stage 개념
  • README와 마크다운 문법



여담

문제 해결을 위해 구글링 하던 중 흥미로운 것을 발견했다.

On Oct. 1, 2020, any new repositories you create will use main as the default branch, instead of master

git에서 새 저장소 생성 시 기본 브랜치의 이름으로 관습처럼 사용하던 master branch가 단어 'master'가 내포하는 인종차별적 성격때문에, Github는 대신 main branch라는 용어를 사용하기로 했다고 한다. BLM과 관련이 있다고 하는데, PC를 위한 바람직한 선택인지, 기술 상의 이슈와 관련이 없음에도 관습을 수정하여 번거로움을 나을 뿐인지 개발자들의 생각이 궁금하다.

profile
TIL/projects

0개의 댓글