Week1 - Day1 (Git)

jae oh·2021년 7월 13일
0

2021-summer-ai-bootcamp

목록 보기
2/8

1. Git

Git은 개발자에게 친숙해야할 존재라고 생각한다.
개발하면서 여러 버전을 만들어야할 일도 있을 것이고, 또는 다른 기능을 제작해야할 때 그 모든 기록을 남길 수 있기 때문이다.

그래서 Git이 뭔데?

  • 여러 사람들이 하나의 코드 혹은 프로젝트를 관리할 때 분산해서 버전관리를 할 수 있는 시스템

라고 할 수 있겠다.

Git에서 사용되는 기능은 주로 add, commit, push가 있다.

  1. add: 개발자가 새로 생성하거나 수정한 코드를 추적할 수 있게 staging area 단계로 코드를 올려 반영할 수 있게 해준다.
  2. commit: staging area에 올라온 파일을 snapshot처럼 기록을 남긴다. git의 이 commit을 단위로 버전관리를 한다고 할 수 있다. commit -m 메세지내용을 사용하면 commit할 때 짧은 메모를 남길 수 있다.
  3. push: addcommit은 로컬 저장소에서 진행되는 단계이고, commit까지 끝난 상태에서 원격저장소인 Github에 올리기 위해서 사용되는 명령어다.
  • git status: 로컬 저장소에서 파일들의 상태를 볼 수 있다.
  • git log: 내 git 기록들을 볼 수 있다.

2. Branch 관리

Branch는 개발을 분산할 때 사용된다.
내가 캡스톤을 진행했을 때, 우리팀은 각각 머신러닝 파트, 안드로이드 앱 개발 파트(폰/워치), 서버 파트 등 여러 파트를 나눠서 활동을 했다.
각각 feature/기능 이름의 가지를 만들어 서로 따로 개발을 진행했고, master branch는 가장 중점적인 branch로 개발이 완료되어 문제가 없어 바로 패치 가능한 부분들이 저장되었다. 이렇게 해야, 원 상태의 코드도 보호(?)하면서 이슈가 생겼을 때 따로 관리할 수 있다.

  1. git branch <branch_name>: branch를 새로 생성한다
  2. git checkout <branch_name>: 'branch_name'이라는 이름의 브랜치로 시점을 이동한다.
  3. git merge <branch_name>: 현재 작업중인 branch를 원하는 branch와 병합할 수 있다.
  4. git branch -d <branch_name>: branch를 삭제한다. 더이상 이 브랜치가 필요 없을 때 한다.

3. Github (원격 저장소)

Github는 주로 다른 사람과 협업을 할 때 사용한다. 다른 원격 저장소들도 있지만 가장 대중적인 서비스가 Github이다.

https://github.com/에서 회원가입하면 사용할 수 있다.

repository를 만들 때

  1. Public/ Private: 본인의 원격 저장소가 모두가 볼 수 있게 해놓을 거라면 'public'으로, 따로 관리하고 싶다면 'private'으로 설정 하면 된다.
  2. Add a README file: 이거는 처음에 repository(이하 리포)를 생성할 때 이 저장소에 대한 설명서 같은걸 만들 것인지 정하는 것이다. 익숙하지 않다면 생략해도 된다
  3. Add .gitignore: git에 추적되지 않으면 하는 파일들의 리스트를 만드는 것이다. 이또한 생략해도 된다.
  4. Choose a license: 말 그대로 라이센스를 선택하는 것인 데, 나도 아직 써보지 않아서 정확하게는 잘 모르겠다. 그렇다는 건 이것도 생략해도 된다는 것

CLI 환경에서 github와 연결하기

  1. git remote add origin <github 주소>: 로컬 저장소와 원격 저장소를 연결해준다.
  2. git branch -M main: git의 master 브랜치의 이름을 main으로 변경해준다. 이는 github의 정책이 변경되면서 master/slave 등의 여러 명칭들을 변경해야해한다.
  3. git push origin main: 로컬에서 진행한 커밋 내용들을 원격 저장소에 올려준다.

Fork / Push/ Pull Request

학교다닐 때 프로젝트 하면서 제일 헷갈렸던 방식들
1. Fork: 다른 사람의 원격 저장소를 나의 원격 저장소에 그대로 옮기는 것이다. git clone <github 주소>를 통해 원격 저장소 file을 내려 받으면 로컬에서 관리 할 수 있다.
2. 내 로컬 저장소에서 브랜치를 만들어 작업을 진행하고 push한다.
3. 내 원격 저장소를 다른 사람의 원격 저장소로 pull request한다.

  • ForkPull request는 원격 저장소에서 사용되는 것이다.
  • 사실 이 개념들은 아직도 내가 사용할 때마다 헷갈려하는 부분이라 아직도 많이 부족하다고 생각한다... 이게 이해는 가는 데, 막상 사용하다보면 헷갈리고 제대로 동작이 안되는 경우가 많아서(100% 휴먼에러) 이번에는 꼭 내가 완벽하게 숙지할 수 있기를 소원하고 있다.

오늘 과제를 수행하기 위해서 멘토님의 원격 저장소를 fork하고 내 로컬에 clone을 받았다. 그 과정에서 여러 문제들이 있었는데, 해결은 했다. 근데 왜 해결된건지(?) 아직 잘 몰라서 여기에 메모해놓는다... 왜 에러난건지도 모르겠어...
1. fatal: cannot lock ref 'refs/heads/week1/name': 'refs/heads/week1' exists; cannot create 'refs/heads/week1/name' 과 같은 에러가 발생했다.
새로운 브랜치를 생성하고 싶을 때 안되서 결국 다시 처음부터 clone하니 되긴되서 해결하긴했는 데, 저 에러가 왜 발생한건지 아직 잘 모르겠다.
2. 로컬에서 변경한 사항을 push하고 싶었는 데, 제대로 이뤄지지 않았다.
fatal: 현재 브랜치 week1/name에 업스트림 브랜치가 없습니다.현재 브랜치를 푸시하고 해당 리모트를 업스트림으로 지정하려면 다음과 같이 하십시오.
git push --set-upstream origin week1/name
라 해서 위 명령어를 그대로 했으나,
! [remote rejected]라며 push를 거부당했다. 흑흑 하라는대로 해도 안되는건 뭐야
그래서 해결책은! git branch --set-upstream-to=origin/week1 week1/name으로 해서 원격 브랜치를 지금 현 브랜치와 연결시켜준다...?라는 느낌으로 해주니 이후에 원활하게 push가 되었다.

  • 여기서 배운 점: 삽질도 해봐야한다.

4. Jupyter Notebook

Python을 사용해봤던 사람이라면 아마 Pycharm이나 VS Code와 같은 텍스트 에디터나 IDE를 접해봤을 것이다. 개발환경이라고 보면 되는데, Jupyter Notebook은 내 주변 동기들도 많이 쓸만큼 인기가 있다.

Jupyter Notebook은 python과 markdown을 동시에 사용할 수 있으며, 공유하면서 개발하기에도 편리하다. 나 역시도 학교에서 프로젝트를 진행할 때 많이 사용하곤 했었다. 그리고 동기들과 함께 다른 사람들에게도 이 jupyter notebook을 강력 추천하고 있다.

  1. 우선 python을 설치해주세요. (이건 macOS나 윈도우 환경에 따라 설치 방식에 차이가 있을 수 있으니 자신의 상황에 맞게 해주세요)
  2. pip는 python의 패키지를 관리해주는 관리자라고 생각하면된다.
    pip install jupyter notebook이 나올 것이다.
  3. 설치가 다 되면 jupyter notebook'을 입력하면 된다. 브라우저가 켜지면서 jupyter 환경에 접속할 수 있는 데, 그러면 환경은 다 갖춰진 것이다!

간단 명령

  • esc + y: python3을 작성하고 실행할 수 있는 code cell
  • esc + m: markdown을 작성할 수 있는 markdown cell
  • cmd + enter: 현재 cell을 실행
  • shift + enter: 현재 cell을 실행하고 다음 cell로 이동

Markdown 문법은 익히면 되니 설명 생략

원래 오늘 Day 2 TIL까지 끝내려고했는데 편도염이랑 인후염 상태가 다시 안좋아져서 우선은 여기까지 끝내는 걸로... 얼른 건강해지고 싶다

profile
여기저기 돌아다니는중

0개의 댓글