개발 학습일지(TIL)

내일배움캠프 2일차 TIL : 협업을 위한 GITHub와 GIT, 그리고 규칙 정하기

Veams 2022. 11. 15.

 

미니프로젝트에서 백엔드를 담당하였는데,

협업하려는 GIT에 대해 잘 모른다는 것을 알게됨.

 

먼저, GITHUB의 원격저장소를 이용하는 법에 대해서 다시 살펴보는 시간을 가졌다.

 

 

원격 저장소와의 네 가지 상호작용.  : 푸시 Push, 풀Pull, 클론Clone, 패fetch

1. push

로컬 저장소의 변경사항을 원격저장소에 밀어넣는 것이다.

일종의 업로드이며, 변경사항(커밋)을 업로드 한다.

 

push는 두 가지 단계를 거친다.

1) 먼저, push를 하기 위해서 어떤 원격저장소에 밀어넣을지 알아야 한다.

즉, push할 그 원격저장소의 경로를 로컬 저장소에 추가해줘야 한다.

- remote를 add 하는 것이다.

2) git 명령어로서 push

git push 한다.

echo "# test" >> README.md
git init
git add README.md
git commit -m "first commit"
git branch -M main
git remote add origin git@github.com:dev9team/test.git
git push -u origin main

 

사실 git bash를 이용하여, 위 명령어들을 입력하였는데, 몇 차례 오류가 계속 발생해서 진행이 더뎠다.

SSH 연동 문제가 있었는데, 소스트리를 설치하고, github에서 SSH 연동을 하고나니 작동을 하기 시작함.

 

 

새롭게 무언가를 구현해서 작동시키거나,

오류나서 작동이 안 되던 것을 다시 작동시킬 때 짜릿함을 점차 느낄 수 있었다.

이런 과정이 개발 학습하면서 얻게 되는 성취 혹은 즐거움이라고 생각한다.

 

학습(혹은 시간과 노력, 돈이 들어가는 모든 경험)이 마냥 괴롭지 않고

지속할 수 있는 힘을 주는 것은 이런 성취나 즐거움에서 생기는 것이 아닐까

 

2. PULL

원격 저장소를 여려명에서 협업하여 이용하다보면, 내가 모르는 사이에 다른 누군가가 원격저장소를 변경될 수 있다.

pull은 원격 저장소의 변경사항을 로컬 컴퓨터로 당겨오는pull 것이다.

 

명령 프롬프트에

git pull을 입력하면 원격저장소에서 변경된 사항들이 로컬 저장소에 연동된다.

 

 

3. Clone

git으로 관리되는 프로젝트를 로컬저장소로 복사해오는 것이다.

내가 소유하지 않은 저장소이더라도, 나의 컴퓨터로 복제할 수 있다.

코드, SSH 혹은 HTTP를 복사한 뒤,

git clone 명령어를 활용하여 작성한다.

그렇게 되면 임의로 설정한 폴더에 원격저장소가 복제된다. 

 

 

 

이를 통해 github상에 존재하는 많은 프로젝트들을 로컬저장소로 가져올 수 있다.

이때 커밋 로그들도 함께 복제가 된다.

 

4. fetch는 다음에 추가 

 

정리

clone은 git으로 관리되는 프로젝트를 로컬저장소로 복사해오는 방식

push는 로컬저장소에서 변경된 사항을 원격저장소로 밀어넣는 방식

pull는 원격저장소에서 변경된 사항을 로컬저장소로 당겨오는 방식

 

git과 github를 통해서 미니프로젝트를 할 때

프로젝트를 하면서 무언가 만들어질 때마다 git을 통해서 계속 commit을 한다. 

그리고 원격저장소를 만들어주고, 원격저장소를 로컬저장소에 추가한 다음에

계속  push(백업)을 하면서 개발을 하면된다.

 

 

- 특정 원격저장소의 settings의 collaborators에 들어가서, 팀원의 계정 이름을 추가하면 팀원들의 이메일로 초대장이 전송된다.

초대장을 수락하면 팀원이 그 저장소에 push가 가능해진다. 이것이 한 가지 방법인데

 

 

더 좋은 방법은 풀 리퀘스 pull request가 있다고 하는데 그것은 추후에...

 

 

4. 협업 이슈

1) 다른 팀원이 post를 담당하고, 나는 get 을 담당하기로 하였는데,

 

여러개의 비슷한 페이지까지 구현하려는 상태에서,

이렇게 post/get 으로 역할을 나눈 것이 별로 좋은 방법이 아니라는 생각이 든다.

구현하려는 페이지별로 나누어서 작업을 하는 게 어떨지 생각해본다.

 

2) 협업에 필요한 기술적인 지식도 알아야 하지만,

협업과정에 어떻게 하면 불필요한 낭비를 줄일지도 미리 논의를 해야겠다.

 

이 상황을 전문적으로는 뭐라고 부르는지 모르겠다. 코딩 컨벤션? 리팩토링??

별다른 규칙 논의 없이, 주석 작성없이

post를 작업한 백엔드 팀원의 파일들을 받아 뒤이어서

 

내가 get 기능을 무작정 추가하려고 작업을 시작하니까

함수나 비슷한 변수 이름 때문에 헷갈려서 엄청 시간을 낭비했다.

 

남은 프로젝트 기간 동안은 작업에 바로 들어가기 전에,

각자가 왜 이렇게 코드를 짰는지 사전에 더 많은 이야기를 나누어야겠다.

 

댓글