2023. 8. 10. 14:49ㆍToday I Learned (TIL)
길고 멋진 싸움이었다. 초보인 우리는 Git hub 와 약 하루반정도 씨름을 했고, 결국 이겼다!
Git hub 에서 clone, push, pull, merge를 할때에 주의사항 몇 가지를 적어보려 한다.
의미
Clone
Git hub 에 있는 뼈대코드를 말한다. 처음에는 현재 Git hub에 저장된 버전을 다운로드 받는 작업이라고 생각하면 된다.
내 컴퓨터에 폴더를 하나 만들고, clone을 하면, Git hub 에 저장된 파일이 내 vs code에 다운받아진다.
Pull
남이 수정해서 Git hub에 push&merge 한 경우, 현재시점 최종버전인 main을 불러오는 기능이다.
내가 이전버전에서 수정을 하고 있는경우, 내 vs code상에 내가 수정중인코드와 현재시점 최종버전이 합쳐지며, conflict이 날 경우 내 vs code 상에서도 확인이 가능하다.
Push
내가 수정한 코드를 Git hub에 올리는 작업이다.
Merge
내가 수정한 코드와 현재 main 의 코드를 합치는 과정이다. 이 과정에서 conflict 가 발생할 수 있다. conflict 란, 원래 뼈대에서 개발자1과 개발자2가 각각 같은 장소의 코드를 변경했을때 일어나는 에러다. 이 경우에는 컴퓨터가 어떤것을 선택할지 모르므로, 지금 상황에서 conflict가 발생했다면, 그 conflict를 확인해서 더이상 쓰지 않는 코드를 버리고 새 코드로 바꿔주는 작업을 해주어야 한다. merge가 완료되면 새로운 최종 main이 만들어진다.
방법
Git Initialize
git을 처음 시작할때 가장 먼저 해줘야 할 명령어이다.
git init
Clone
1. 프로젝트의 github 주소를 복사한다

2. 로컬 컴퓨터(내컴퓨터)에서 프로젝트 폴더를 만든다.

3. visual studio code를 열어 해당폴더를 열어준다.
4. 터미널을 열어 다음 명령어를 입력한다. (맨 뒤에 ' .' 빼먹지 말기)
git clone <github 주소> .
Remote Add
다른사람이 먼저 올린 코드를 clone(복사)하는게 아니고 내가 레파지토리에 처음 코드를 올리는 것이라 하면,
다음과 같은 코드를 작성한다.
git remote add origin <github 주소>
Pull & Fetch
원격 저장소에서 로컬 저장소로 소스를 가져오는 명령어는 pull과 fetch가 있다. pull과 fetch의 차이는 가져온 소스를 merge 하느냐, 안하느냐의 차이이다. pull 은 원격 저장소의 소스를 가져오고, 해당소스가 현재 내 소스보다 더 최신버전일 경우, 지금의 버전을 해당 소스에 맞춰 올린다(로컬에 merge한 버전으로 가져오는 것). 반면, fetch는 소스를 가져오기만 할 뿐, merge하지는 않는다.
git fetch 명령어이다.
git fetch origin
git fetch 명령어이다.
git log
제대로 가져왔는지 확인을 위해 git log 명령어로 확인한다.
git pull origin main
origin main 의 깃을 가져오려면 위와 같이 작성
git pull <원격 저장소 명> <branch name>
특정 저장소의 branch 를 가져오려면 각각의 저장소명과 브랜치 명을 써서 가져오면 된다.
Push
1. git branch <브랜치명> 작성
git branch feature/<branchname>
2. git switch <브랜치명> 작성
git switch feature/<branchname>
3. 코드 변경을 커밋한다.
git add .
git commit -m "edited something"
4. github에 코드를 업로드한다.
git push origin feature/<branchname>
Pull
1. Git hub 에서 Compare & pull request 알림 클릭
2. Create pull request 클릭
3. Conflict 이 있다면 - > Conflict 해결 (내가 만든 코드가 윗줄, 같은 부분에 다른 개발자가 수정한 부분이 아래에 뜨는데, 둘 중 어느 코드로 진행할지 결정해서 나머지 코드는 지워준다)
4. Conflict 이 모두 해결되었거나, conflict이 없다면 "Merge pull request" 클릭
5. Confirm merge 클릭하면 최종적으로 코드가 합쳐진다.
주의사항
Pull
clone을 로컬 컴퓨터 폴더로 할 것인데, 처음 저장해놓았던 폴더 이름을 변경할 경우 문제가 생긴다. 폴더 이름은 처음 그대로 유지하도록 한다.
Git Ignore
Github 에 venv 파일은 올리지 말아야 하는데, 이 경우 gitignore 파일을 만들어서 venv와 이외 git에 올리지 말것들을 적어주어야 한다. (예를들면 투명망토를 입히는 거라고 생각하면 된다...) 그런데 gitignore를 만든다고 파일이나 폴더들을 지워주는 것은 아니다. 이미 내 repository가 있으니 지워주고 다시 가져와야 한다.
git rm -rf --cached .
git add .
위와 같이 작성하면 해결된다.
특이사항
같은 프로젝트를 각기 다른 두개의 repository에 올리는 경우
내가 만드는 프로젝트를 내 github에 올리고 있다가, 그 프로젝트를 다른 깃헙에 올리려고 할때.
이럴때에는 지금 사용중인 project에서 깃을 지우고, 새로운 깃주소로 시작하면 된다.
그러나 이 경우, 새로운 깃주소로 다시 올릴때에는 지금까지 했던 commit history는 남지 않기 때문에 왠만하면 자주 있는 일은 아니다.
ls -al
로 내 프로젝트 폴더 안에 '.git' 이 있는지 확인한다. 보통 mac의 경우, '.'으로 시작하는 폴더는 폴더안에 보이지 않고 숨겨져 있는 경우가 많기 때문에 위 명령어로 파악하는 것. '.git'이 있는것이 확인되었다면 지워야 한다.
rm -rf .git
깃폴더를 지우는 명령어이다. 이걸 지우고 나면 다시 처음부터 git init 부터 새로운 repository 주소로 시작하면 된다.
참고
https://teamsparta.notion.site/230807-Git-aff1ea525e3d4e589094e3ca459ca272
'Today I Learned (TIL)' 카테고리의 다른 글
| What is API (Application programming interface)? (0) | 2023.10.22 |
|---|---|
| [TIL] vscode, python, django 유용한 명령어 모음 (0) | 2023.09.04 |
| [TIL] Python 천천히 복습_List, Dictionary, if, for, enumerate, break, max, def (0) | 2023.08.18 |
| [TIL] 가상환경 만드는 법 (0) | 2023.08.08 |
| [TIL] Git hub, mongo DB error (0) | 2023.08.07 |