Git은 개발자에게 친숙해야할 존재라고 생각한다.
개발하면서 여러 버전을 만들어야할 일도 있을 것이고, 또는 다른 기능을 제작해야할 때 그 모든 기록을 남길 수 있기 때문이다.
그래서 Git이 뭔데?
라고 할 수 있겠다.
Git에서 사용되는 기능은 주로 add, commit, push가 있다.
staging area
단계로 코드를 올려 반영할 수 있게 해준다.staging area
에 올라온 파일을 snapshot처럼 기록을 남긴다. git의 이 commit을 단위로 버전관리를 한다고 할 수 있다. commit -m 메세지내용
을 사용하면 commit할 때 짧은 메모를 남길 수 있다.add
와 commit
은 로컬 저장소에서 진행되는 단계이고, commit까지 끝난 상태에서 원격저장소인 Github에 올리기 위해서 사용되는 명령어다.git status
: 로컬 저장소에서 파일들의 상태를 볼 수 있다.git log
: 내 git 기록들을 볼 수 있다.Branch는 개발을 분산할 때 사용된다.
내가 캡스톤을 진행했을 때, 우리팀은 각각 머신러닝 파트, 안드로이드 앱 개발 파트(폰/워치), 서버 파트 등 여러 파트를 나눠서 활동을 했다.
각각 feature/기능
이름의 가지를 만들어 서로 따로 개발을 진행했고, master branch
는 가장 중점적인 branch로 개발이 완료되어 문제가 없어 바로 패치 가능한 부분들이 저장되었다. 이렇게 해야, 원 상태의 코드도 보호(?)하면서 이슈가 생겼을 때 따로 관리할 수 있다.
git branch <branch_name>
: branch를 새로 생성한다git checkout <branch_name>
: 'branch_name'이라는 이름의 브랜치로 시점을 이동한다.git merge <branch_name>
: 현재 작업중인 branch를 원하는 branch와 병합할 수 있다.git branch -d <branch_name>
: branch를 삭제한다. 더이상 이 브랜치가 필요 없을 때 한다.Github는 주로 다른 사람과 협업을 할 때 사용한다. 다른 원격 저장소들도 있지만 가장 대중적인 서비스가 Github이다.
https://github.com/
에서 회원가입하면 사용할 수 있다.
Public/ Private
: 본인의 원격 저장소가 모두가 볼 수 있게 해놓을 거라면 'public'으로, 따로 관리하고 싶다면 'private'으로 설정 하면 된다.Add a README file
: 이거는 처음에 repository(이하 리포)를 생성할 때 이 저장소에 대한 설명서 같은걸 만들 것인지 정하는 것이다. 익숙하지 않다면 생략해도 된다Add .gitignore
: git에 추적되지 않으면 하는 파일들의 리스트를 만드는 것이다. 이또한 생략해도 된다.Choose a license
: 말 그대로 라이센스를 선택하는 것인 데, 나도 아직 써보지 않아서 정확하게는 잘 모르겠다. git remote add origin <github 주소>
: 로컬 저장소와 원격 저장소를 연결해준다.git branch -M main
: git의 master 브랜치의 이름을 main으로 변경해준다. 이는 github의 정책이 변경되면서 master/slave 등의 여러 명칭들을 변경해야해한다.git push origin main
: 로컬에서 진행한 커밋 내용들을 원격 저장소에 올려준다.학교다닐 때 프로젝트 하면서 제일 헷갈렸던 방식들
1. Fork
: 다른 사람의 원격 저장소를 나의 원격 저장소에 그대로 옮기는 것이다. git clone <github 주소>
를 통해 원격 저장소 file을 내려 받으면 로컬에서 관리 할 수 있다.
2. 내 로컬 저장소에서 브랜치를 만들어 작업을 진행하고 push
한다.
3. 내 원격 저장소를 다른 사람의 원격 저장소로 pull request
한다.
Fork
와 Pull request
는 원격 저장소에서 사용되는 것이다.오늘 과제를 수행하기 위해서 멘토님의 원격 저장소를 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가 되었다.
Python
을 사용해봤던 사람이라면 아마 Pycharm
이나 VS Code
와 같은 텍스트 에디터나 IDE를 접해봤을 것이다. 개발환경이라고 보면 되는데, Jupyter Notebook은 내 주변 동기들도 많이 쓸만큼 인기가 있다.
Jupyter Notebook은 python과 markdown을 동시에 사용할 수 있으며, 공유하면서 개발하기에도 편리하다. 나 역시도 학교에서 프로젝트를 진행할 때 많이 사용하곤 했었다. 그리고 동기들과 함께 다른 사람들에게도 이 jupyter notebook
을 강력 추천하고 있다.
pip
는 python의 패키지를 관리해주는 관리자라고 생각하면된다.pip install jupyter notebook
이 나올 것이다.jupyter notebook'
을 입력하면 된다. 브라우저가 켜지면서 jupyter 환경에 접속할 수 있는 데, 그러면 환경은 다 갖춰진 것이다!간단 명령
Markdown 문법은 익히면 되니 설명 생략
원래 오늘 Day 2 TIL까지 끝내려고했는데 편도염이랑 인후염 상태가 다시 안좋아져서 우선은 여기까지 끝내는 걸로... 얼른 건강해지고 싶다