내가 작성한 소스 코드를 github 원격 저장소에 업로드 하고 싶은 상황이 온다. 처음에 git 공부를 하다보면 디테일한 상황을 고려하지 않게 되는데 이게 실전에 다가오면 원격 저장소 상태나, 로컬 저장소 상태 등에 따라서 상황이 구분이 되고 막상 업로드 하려고 하면 딱히 방법이 떠오르지 않는다. 그래서 3가지 경우의 수 정리해보았다.

 

1. 로컬에서 작업을 주욱 하다가~ Readme.md 파일을 생성하지 않은 원격 저장소에 소스코드를 업로드 하는 경우
2. 이미 만들어진 https 주소를 복사하여 clone 후 로컬에서 작성중인 소스코드를 원격 저장소에 업로드 하는 경우
3. 이전에 생성한 원격 저장소에 이미 Readme.md 파일이 있는 경우 내가 작업했던 로컬 작업영역 내용을 원격에 업로드 하는 경우

 

1. 로컬에서 작업을 주욱 하다가~ Readme.md 파일을 생성하지 않은 원격 저장소에 소스코드를 업로드하는 상황

로컬에 작업을 진행하고 커밋

 

일단 로컬에서 저장소를 만들어서 다음과 같이 파일을 만들고 add 후 commit하여 작업이 끝났다고 가정하자.

Add a README file을 체크하지 않고 git repository를 생성

 

미리 만들어 놓은 git repository가 떠올랐고 여기엔 readme.md 파일이 없다.

> $ git remote add origin "생성한 git repository의 https 주소" : 원격 저장소의 주소를 지정

git remote add 명령어 실행화면

> $ git remote -v : 등록된 원격 저장소 주소 확인

 

등록된 원격 저장소 주소

 

> $ git push -u origin main : -u라는 옵션은 --set-upstream 옵션과 동일하다. 특정 브렌치를 지정해서 업로드를 위한 길을 지정하는 작업이라고 보면 된다. 길을 지정하면 그 브렌치로 소스 코드가 업로드 된다. ( 이 옵션 지정 없이 push 명령어를 입력하게 되면 git push --set\-upstream origin main이라는 에러 문구가 뜬다. )

 

                                   

 

 

원격 저장소에 소스 코드가 업로드 되었다.

소스 코드가 업로드된 상황

2. 이미 만들어진 https 주소를 복사하여 clone 후 로컬에서 작성중인 소스코드를 원격 저장소에 업로드 하는 경우 (이 때는 Readme.md 파일 생성여부 상관없음)

 

HTTPS 주소

 

이미 만들어 놓은 git repository의 원격 저장소의 https 주소를 복사

clone 명령어 실행

> git clone "git repository의 https주소" : clone은 원격의 저장소를 로컬에다 복제를 하는 것이라 보면 된다.

  결과적으로 현재 디렉토리에 원격 저장소 폴더가 생기고 그 안으로 이동한다.

clone 이후 상황

해당 폴더에 들어가니 branch문구가 찍히고 현재 디렉토리에 원격의 파일이 들어왔다.

git remote -v 실행결과

git clone을 하는 경우에는 remote 주소가 자동으로 지정된다.

그리고 이상황에서 파일을 새로 추가 혹은 변경 등의 작업이 일어난다고 가정하자.

작업을 한 상황

> git push origin main : clone을 한 상황에서는 set-upstream을 따로 지정하지 않아도 된다.

바로 git push origin main으로 소스코드 업로드 가능

 

원격 저장소에 업로드
업로드된 결과

 

3. 이전에 생성한 원격 저장소에 이미 Readme.md 파일이 있는 경우 내가 평소에 작업했던 로컬 작업영역 내용을 원격에 업로드 하는 경우

 

새 저장소 생성

이 경우에는 이전에 원격 저장소를 만들어놨는데 README.md 파일이 있는 경우이다.

로컬에서 작업을 완료함

그리고 로컬에서 다음과 같이 작업을 완료했다고 가정하자

이 때 위의 1번의 방법과 같이 업로드 하려하는 경우 다음과 같이 된다.

에러

error : failed to push some refs to "주소~" 라는 에러가 난다. 이러한 이유는 원격 저장소에 README.md 파일이 존재해서 그렇다. README.md 파일이 없는 경우 로컬에 있는 소스코드만 원격으로 들이밀면 되나, README.md 파일이 있기에 이것으로 인해 로컬 저장소가 예상한 것과 원격 저장소의 상태의 불일치가 발생한다.

그래서 로컬 저장소는 "이거 혹시 원격 저장소에 누가 push 한거 아니야?" 라고도 생각할 수 있는 것이다.

 

해결 방법은 두가지다.

1) git push -f origin main ( -f 옵션을 이용한 강제 푸시방법 )

2) git pull origin main --allow-unrelated-histories

1번 방법은 뭔가의 불일치 느낌이 있어도 억지로 밀어 넣겠다라는 뜻이고

2번 방법은 --allow-unrelated-histories 옵션 설정으로 pull하여 원격 저장소의 변경사항을 가져오고 로컬 저장소에 merge도 시키겠다는 말( pull은 merge 과정이 포함한다. 주의!!)

 

1번의 방법

먼저 1번의 방법으로 강제로 업로드 시켜본다. 결과는 README.md 파일이 없어진다. 만약에 README.md에 뭔가 중요한 내용이 있었더라면 이거 큰 일이다...

Readme.md 파일 어디감??

음.. 이번엔 시간을 과거로 되돌려서 이제 2번 방법으로 해보자 ( 앞 과정 똑같이 셋팅 )

원격 저장소 등록

> git remote add origin "원격 저장소 주소"

> git pull origin main --allow-unrelated-histories

앞의 명령어를 실행시킨 결과 Merge 메세지를 작성하는 창이 나오고

결국엔 Merge가 된다. 원격 저장소의 Readme.md 파일이 로컬 저장소로 들어와 merge된 것이다.

readme.md 어서오고

 

readme.md 어서오고

이제 다시 원격 저장소로 push 명령어 실행

 

readme.md파일이 원격 저장소에?

readme.md파일이 사라지지 않고 원격 저장소에 들어온다.

이는 readme.md 파일을 로컬로 가져오고 상태를 맞춰주고 push를 했기 때문에 그렇다.

강제 push 방법인 1번 방법도 많이 쓰는 방법이기도 하지만 Readme.md 파일에 뭔가 써놓은게 많아서 날라가는 것을 원치 않는 경우에는 2번 방법을 써주자.

'Git & Github' 카테고리의 다른 글

커밋로그를 바꿀 수 있는 git rebase  (0) 2023.07.17
프로젝트의 시작은 .gitignore부터..  (0) 2023.07.17

+ Recent posts