딥러닝 개발환경

8-4. Github 사용하기!

Do-Woo-Ner 2020. 3. 12. 17:50

안녕하세요~


지난글까지는 git을 이용하여 local repo에 파일을 업로드하는 내용을 다루었어요. 


<사진1>



이번글에서는 git을 이용하여 remote repo(원격저장소; Github)에 파일을 업로드 하는 방법에 대해 다루어보겠습니다.







<1. 원격저장소(remote repository)>


내 local 컴퓨터에서도 원격저장소를 만들어 저장시킬 수 있지만, 기본적으로는 다른 컴퓨터에 내 파일들을 저장시키는것이 '원격'이라는 의미를 잘 보여주기 때문에 다른 컴퓨터에 저장시키는 방식을 보여드리도록 할게요.


원격저장소에 내 코드파일들을 저장시키면 내 코드를 백업할수도 있고, 다른 사람들과 같이 협업할수도 있게 됩니다.


이곳에서는 Github이라는 원격 저장소에 local repo를 업로드 하는 방법에 대해서 알려드릴거에요



1) Github 만들기


먼저 ID를 만들어줍니다.






ID를 만들고 접속하면 아래 화면이 생성되는데요.


기본적으로 "89douner/89douner.github.io" 라는 repo가 생성되어 있네요.

저는 CNN 관련 코드를 업로드할 repo가 필요하기 때문에 'New' 버튼을 클릭해 새로운 CNN repo를 만들어줄거에요.






아래와 같이 자신의 목적에 맞게 기입합니다.

!!!!!!!!!!!!!주의해주세요!!!!!!!!!!!!!!!

저는 public으로 설정해주었는데요. 가끔씩 회사의 중요한 코드나 외부로 공개되어서는 안되는 project를 github에다가 올릴때 public repo에 올리면 법적인 문제가 생길 수 있어요 ㅜㅜㅜㅜ

그러니 이때는 회사에 요청해보고 승인을 해줄경우 private repo를 생성하여 버전관리를 하시면되요~







손쉽게 CNN repo가 생성된것이 보이시죠?












<2. Github에 업로드하기>


이제 내 local repo에 있는 코드를 github 원격 저장소에 업로드해볼게요. (아래 나온 설명대로 진행할 예정입니다)





Github에 코드를 올리기 위해 이전글에서 했던것처럼 code를 만들어주고, loca repo에 git 저장소를 생성("git init")해줍니다.






2개의 파일 (pytorch_cnn.py, README.md) 을 생성시켜주고 commit을 해줍니다.





"git remote add origin 원격저장소주소" 명령어를 입력해주면, 현재 내 local repo와 remote repo(Github)이 연결됩니다. (add origin의 의미는 "origin=원격저장소주소" 라는 별칭을 붙여주겠다는 뜻이에요. 그래서 push 명령어를 줄때, -u origin master 옵션을 추가해주면 앞으로 git push 명령어를 입력할때 origin(=특정 원격저장소주소)으로 master 브랜치의 파일들을 업로드 시켜주겠다는거에요





그리고, "git push -u origin 브랜치이름" 명령어를 입력하여 내 local repo의 파일을 github에 push해주면, 아래와 같이 인증절차를 거치게 됩니다. (Github ID/PW 입력)





인증절차를 마치면 아래와 같이 정상적으로 업도드 되었다는 메시지를 확인할 수 있어요.

참고로 




CNN repo에 다시 접속하면





아래와 같이 2개의 파일이 정상적으로 CNN repo에 업로드된걸 확인할 수 있어요!




python code를 확인해보니 문제없이 업로드 되었음을 확인할 수 있습니다.






<3. 여러 local repo와 동기화>


원격 저장소는 여러 로컬 저장소의 작업들을 동기화해서 백업과 동시에 협업을 할 수 있는 환경을 만들 수 있어요.


집과 사무실을 이동하며 개발하는 상황이라고 가정하고, 이전에 만든 원격 저장소를 복제하여 git_home, git_office라는 2개의 local repo (로컬 저장소)를 만들어 볼게요.



1) 집에서 github 코드를 다운받기


먼저 집에 도착해서 아래 명령어를 입력해 github코드를 다운받을거에요.



"git clone github주소 생성되는폴더이름" 





정확히 2개의 파일이 정상적으로 다운받아졌어요.






2) 회사에서도 github 코드 다운받기


사무실에서 github 코드를 다운받기





Github에서 다운 받은 파일을 보면 똑같은 파일이 다운로드 될거에요. 최초에 Github에 올렸을때 master 브랜치에서 origin 옵션준것을 기억하시나요?






clone을 통해 다운 받으면 ".git" 폴더에 그대로 origin 정보가 들어있는걸 확인할 수 있어요. 그래서 git clone을 통해 다운 받으면 나중에 push, pull 명령어로 업로드하고 다운로드할때 따로 원격저장소주소를 입력해주지 않아도 되요. (뒤에가서 좀 더 자세히 설명할게요!)








3) 집에서 코드 수정하고 github에 업로드하기


먼저 집에서 다운받은 python파일을 아래와같이 수정해줄거에요.





수정한 내용은 다시 commit 으로 집에 있는 loca repo에다가 업로드 시켜줄거에요.




git clone을 통해 다운받은 .git 폴더에 origin 정보가 들어있다고 했죠? 아래와 같이 "git remote -v"를 통해 확인해보면 origin 키워드가 어느 원격저장주소를 갖고있는 알 수 있어요.





따로 push 명령어를 입력할때 add 옵션을 주지않아도 origin에 할당된 원격주소에 local repo가 업로드되요.

 




집에서 작업한 파일이 정상적으로 github에 업로드된걸 확인할 수 있어요!









4) 변경된 code 확인하기


집에서 변경한 code를 업로드 했는데, 무엇이 변경되었는지 확인해볼까요?

먼저 아래 commits 탭 부분을 클릭해주시면 지금까지 commit 한 history가 나와요. (지금까지 작업했던 여러 버전들이 나오는거죠)





아래 집에서 commit했던 2 파일을 클릭하면

어떤 부분이 추가되었는지 확인할 수 있어요!

("No newline at end of file" 메시지는 치명적인 에러가 있는건 아니고, 보통 code를 작성할 때 마지막 코드줄은 아래빈칸을 만들어주는것이 관례라 이런 메시지가 나오고 있어요. 실행에 문제가 있는건 아니구요!)










5) 집에서 변경한 내용 사무실에 가져오기



이전에 회사에서도 git clone을 통해 github 코드를 다운받고, .git 폴더도 다운받았던것을 기억하시죠?


"git pull origin" 명령어를 입력해주면 아래와 같이 Github에 있는 집에서 변경했던 파일이 다운이되요. 





 이때 다운된 파일은 집에서 작업해서 바뀐 내용들이 들어 있는 파일만 다운됩니다 (덮어쓰기 생각하시면되요1). 만약 github에 있는 내용과 사무실에 있는 내용이 다르지 않다면 'already up to date(이미 최신상태이다)' 메시지가 뜰거에요 




다운받은 파일은 똑같이 작업하고 다시 github에다 업로드하면 "집<-->사무실" 이렇게 코드를 동기화시켜서 사용할 수 있게되요!








지금까지 github에 업로드하는 방식에 대해서 알아보았어요!


다음글에서는 간단하게 VS code IDE와 sourcetree를 이용하여 GUI형태로 github을 이용하는 방식에 대해서 알아보도록 할게요!




아래링크는 기본적인 git 명령어에 대해서 다룬글이니 사용시 참고해주세요~


https://medium.com/@pks2974/%EC%9E%90%EC%A3%BC-%EC%82%AC%EC%9A%A9%ED%95%98%EB%8A%94-%EA%B8%B0%EC%B4%88-git-%EB%AA%85%EB%A0%B9%EC%96%B4-%EC%A0%95%EB%A6%AC%ED%95%98%EA%B8%B0-533b3689db81


https://medium.com/@joongwon/git-git-%EB%AA%85%EB%A0%B9%EC%96%B4-%EC%A0%95%EB%A6%AC-c25b421ecdbd












[글 래퍼런스]

https://opentutorials.org/module/3733

https://www.youtube.com/playlist?list=PLuHgQVnccGMA8iwZwrGyNXCGy2LAAsTXk

https://rogerdudler.github.io/git-guide/index.ko.html



[사진 래퍼런스]

사진1

https://dev.to/mollynem/git-github--workflow-fundamentals-5496