안녕하세요~


이번시간에는 본격적으로 git을 이용하여 github에 코드들을 저장시키는 작업을 해보도록할거에요.



그럼 먼저 Git이라는 software program을 설치하고 이용하는 방법부터 알아보도록 할게요!





<1. Git 저장소 선언해주기>


1) Git 프로그램 설치하기


Git은 software program이에요. 그리고 git 프로그램에서 제공되는 명령어를 이용해 작업을 수행하게 되죠. 이러한 작업들을 하기 위해선 먼저 프로그램이 설치되어야겠죠? 아래링크를 접속하고 아래 네모박스부분에 download를 클릭하면 저절로 실행파일이 다운로드 됩니다 (페이지가 넘어가는데 실행파일 다운로드될때까지 그냥 기다리시면 되요~)


https://git-scm.com/



저는 그냥 기본 설정되어있는 상태로 전부 'Next'를 클릭했어요~




프로그램 설치된걸 확인하실 수 있어요~




Git bash를 클릭해주면, 아래 그림처럼 terminal을 이용하여 git을 사용할 수 있게되요! (나중에는 Git GUI로 더 쉽게 사용할 수 있어요! 여기서는 개념설명을 위해 git bash로 작업을 해볼게요!)







2) 프로젝트 폴더 만들어주기


Git을 이용하여 프로젝트를 관리하기 위해서는 프로젝트 폴더를 Git 저장소로 만들어야 해요.


저같은 경우에는 git 프로그램을 설치하니 숨은폴더에 git폴더가 있었어요.



이렇게되면 terminal (git bash)에서 작업을 할때 permission에러가 나는경우가 종종 생기기 때문에 바탕화면에 폴더(Tutorial 폴더)를 생성해주고 해당폴더(Git)를 붙여넣기해주었어요.








3) Git init


Tutorial 폴더에 접속하여 프로젝트 폴더 (pytorch_tutorial)을 만들고, git init 명령어를 입력하면, git (프로그램)에게 현재 프로젝트 폴더 (pytorch_tutorial)를 버전 관리 (git=VCS(Version Control System)하겠다고 선언하게 됩니다.




git init을 실행시켜주면 .git이라는 폴더가 생성되는데요. 





이 폴더(.git) 안에는 버전관리에 필요한 여러가지 파일들이 생성되게 됩니다.




결과적으로 프로젝트 폴더(pytorch_tutorial)가 새로운 git 저장소로 선언됐습니다!








<2. 버전 만들기>


이전에 배웠던 git의 workflow를 머리속에 그리면서 본격적으로 여러 버전을 만들고 어떻게 관리하는지 알아보도록 할게요.


<사진1>





1) 버전1(A) 만들기


먼저 버전A를 만들고 local repo에 업로드를 해볼게요.


아래 'pytorch_tutorial'을 git init으로 git repo라고 선언했기 때문에 이곳에 'pytorch_cnn.py'라는 기본 코드를 생성해줍니다.




'git status'라는 명령어를 입력하면 현재 상태를 확인할 수 있는데, commits 된것이 아무것도 없네요.


먼저 'pytorch_cnn.py'라는 버전A를 hyunsu라는 개발자가 작업했다는 인증을하기 위해서 아래와같은 명령어를 입력합니다.


'git config --global user.name 사용자이름'

'git config --global user.email 사용자이메일'





그리고 'add'명령어를 통해 'pytorch_cnn.py'파일을 staging 상태로 옮겨놓은 후, 'commit' 명령어를 통해 버전1d을 local repo에 올려줍니다.




'git log' 명령어를 통해 현재 '버전1'에 대한 정보가 출력되고 이를 통해 버전1이 local repo에 업로드 되었다는 사실을 알 수 있어요.





2) 버전2(B) 만들기


위와 같은 방식으로 버전2를 만들어줍니다. 버전2는 버전1에 기능(code 한줄)이 추가 된거라고 생각하시면 좋을것 같아요.




버전2(B)는 다른 사람이 작업했다는 인증을 남기기위해서 아래와 같이 설정하고 'add->commit' 해줍니다. 그 결과 'git log'명령어를 통해 버전2가 만들어 졌음을 알 수 있어요.




3) 버전3 만들기 (-am 옵션)


버전3(C)에 대한 코드를 아래와 같이 만들어 줍니다.




이번에는 버전2에 이어 버전3도 nicholao라는 개발자가 개발했다고 해볼게요. 그리고 버전3(C) 역시 commit하려고 하는데, add 명령어를 건너뛰고 곧바로 commit 시켜주고 싶다면 아래와 같이 '-am'옵션을 주면되요.



'git log'명령어를 통해 3개의 버전이 모두 local repo에 업로드 되었음을 알 수 있어요.







<3. 버전간의 변화 유무 확인하기>


버전 1, 2, 3 간에 변화를 알아보고 싶다면 '-p' 옵션을 주면 되요.


'git log -p' 명령어를 입력하면 아래와 같이 나오는데, 창을 좀더 키우거나


enter를 눌러주시면 계속해서 내용이 출력될거에요.






맨 아래 '1번'부터 순차적으로 설명해볼게요.

노란색: 버전1의 식별자

4f46baa: 버전1의 index


'2번'에서 알 수 있는 사실은 

46c113f: 버전2의 index

index 4f46baa..46c113f: 버전1과 버전2를 비교 -> 버전1을 기준으로 버전2에서 변경된 사항 출력


'3번'에서 알 수 있는 사실은

298a9a1: 버전3 index

index 46c113f..298a9a1: 버전2와 버전3을 비교 




위에서는 모두 현재버전과 현재버전을 기준으로 바로 직전의 버전만 비교후 출력해주었는데, 만일 자신이 버전1과 버전3을 비교하고 싶다면, 'git diff 버전1식별자..버전2식별자' 명령어를 입력해주면 됩니다.





<4. Local repo의 버전삭제 및 되돌리기>


만일 'commit'을 통해 버전1,2,3,4,5를 local repo에 업로드 시켰는데, 버전5,4를 삭제하고 다시 버전3 상태로 되돌리고 싶다면 'reset'명령어를 이용해주시면되요.


먼저 버전4를 만들어주고 commit합니다.






똑같이 버전5를 만들어추고 commit해 줍니다.



'git log' 명령어를 입력하시면 버전1,2,3,4,5 모두 local repo에 등록되어 있음을 알 수 있어요.



여기서 "git reset 돌아가고싶은버전의식별자 --hard" 를 입력해주시면 버전5,4가 삭제되는데... 잠깐!!!!!!!!!!!!!!!!!!!


!!!!!!!!!!!!!!!!!!여기서 잠깐 주의해주세요!!!!!!!!!!!!!!!!!!!!!!

reset 명령어를 통해 삭제하면 현재 내가 .git repo에서 작업하던 pytorch_cnn.py 코드도 변경되요!!! 그러니, 버전4,5를 삭제하기전 code를 따로 보관하고 싶다면 복사해서 다른곳에 저장시켜놔야해요 ㅜㅜ




reset 명령어를 통해 삭제된 결과를 아래와 같이 보실 수 있어요~












<5. .git 저장소 삭제하기>


마지막으로 .git 저장소 자체를 삭제하고 싶다면

.git 폴더가 있는 경로로 이동하여 'rm -r .git'을 입력해주세요. 특정메시지가 출력된다면 'y'를 계속 입력해수지면 됩니다! 









지금까지 'pytorch_cnn.py'를 기점으로 생성된 버전1,2,3,.... 을 생성하고 관리하는 방법을 알아보았어요.




그런데, 모두가 pytorch_cnn.py이라는 프로젝트 코드를 공유하고 개발하고 있는데 원래 계획과는 달리 자신이 다른 기능을 구현해보고 싶거나, 회사에서 다른 기능들을 구현해볼 수 없겠냐는 부탁이 들어온다면 어떻게 하시겠어요? 


먄약 'pytorch_cnn.py' 파일을 복사하고 개발하게되면 내가 수정하는 부분이외에는 기존 'pytorch_cnn.py'코드와 대부분 중복된 내용일 테니 불필요한 용량이 증가할거에요 (조금만 수정하기위해 엄청나게 많은 공간을 필요로 할 수 있어요ㅜ)... 내가 수정한 부분만 용량을 차지하면 참 좋을텐데요... 


또한 나중에 잘 만들어서 병합할때 다른 사람들에게 수정된 코드를 하나씩 다 설명해줄수도 없고....


이러한 문제들을 해결하기 위해 다음글에서는 git에서 제공하는 branch라는 기능에 대해서 알아보도록 할게요!











[글 레퍼런스]

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





+ Recent posts