계속 까먹는 것 같아서 글을 적으면서 머릿속에 기억해두려고 작성한다.
Clone, Pull, Push 순서로 적겠다.
Clone
원격 저장소에 있는 파일 및 폴더를 다운받고 싶을 때 clone하는 방법이다.
만약 원격 저장소에 있는 파일 및 폴더를 로컬로 다운받고 싶다면 Clone을 한다.
1. 원격 저장소에 있는 파일을 다운받을 폴더로 이동 후, 'Git Bash Here' 클릭
2. 다운받고자 하는 레파지토리의 주소를 복사한다.
'Code' 버튼을 누르면 해당 주소를 복사할 수 있다.
3. Git Bash로 돌아와서 아래 코드를 작성한다.
git clone {복사한 레파지토리 주소}
예)
$ git clone https://github.com/BananMoon/My-Project.git
4. 다운받은 파일을 확인한다.
.git 은 뭐지?
새로운 숨겨진 폴더 (.으로 시작하는 폴더) 가 생성되어 있다.
이 폴더는 일반적인 폴더를 깃이 관리할 수 있는 저장소로 변경되면서 생기는 것이다. 한마디로 git 저장소가 생성된 것!
clone할 때는 자동으로 생성되었지만
아래에서 소개할 git push나 pull을 먼저 할 때는 $ git init 명령어를 이용해서 미리 생성해주어야 한다.
그럼 원격 저장소로부터 파일을 받을 수 있는 상태가 된다.
Pull
원격 저장소에서 변경된 버전을 나의 로컬에도 반영하고 싶을 때 쓰는 명령어이다.
변경된 것을 로컬에 반영하는 방법은 fetch와 Pull이 있다.
두 명령어의 차이는 "가져온 소소를 merge 하느냐 안하느냐의 차이"이다.
fetch는
단지 소스를 가져올 뿐 merge 하지는 않는다.
pull은
원격 저장소의 소스를 가져오고 해당 소스가 현재 내 소스보다 더 최신 버전(업데이트된 버전)이라고 하면 지금의 버전을 해당 소스에 맞춰 올립니다. (즉, 코드를 수정한다!)
쉽게 말해, 원격저장소에서 fetch명령어로 가져온 후 merge까지 한번에 해 실제 파일의 내용이 변경되는 명령어
본인은 업데이트된 파일이 나의 것과 충돌되지 않는 지, 수정이 잘 됐는지 확인 후 반영하기 때문에
보통 merge까지 한번에 해주는 pull 명령어를 사용한다.
직접 해보겠다.
위의 github 레파지토리에서 test.txt라는 파일을 새로 추가했다. (그냥 깃허브에서 직접 추가했다)
변경된 것을 로컬에도 적용하고자 한다면!
1. 해당 폴더를 깃이 관리할 수 있는 저장소로 변경한다. (이미 로컬 폴더에 .git 폴더가 생성되어있다면 생략해도 된다.)
$ git init
2. 로컬 저장소를 원격 저장소로 연결한다.
$ git remote add origin [레파지토리 주소]
github와 연동하기 위해서는 해당 원격 저장소를 나의 로컬 폴더와 연결해야 한다.
위의 명령어를 사용하면 내PC의 로컬 git 프로젝트와 원격 저장소가 연동된다.
3. 원격저장소와 연결되어있는 지 확인한다.
$ git remote
혹은
$ git remote -v
위 명령어로 잘 연동되었는지 알 수 있으며 좀 더 자세한 정보를 원한다면 git remote -v 명령어를 통해 확인할 수 있다. 해당 명령어를 입력하면 아래와 같이 프로젝트와 연관된 원격지 주소가 출력되게 된다.
4. 원격 저장소로부터 변경된 것을 가져와서 로컬의 프로젝트와 merge한다.
$ git pull origin main
1개의 file이 changed됐다고 알려준다. 추가된 거니까 (+) !
나의 로컬 폴더에 들어가보면 test.txt 파일이 생성된 것을 확인할 수 있다.
Push
작성한 파일을 깃허브에 올리고 싶을 때 push하는 방법이다!
1. 먼저 해당 파일이 있는 폴더에 가서 오른쪽 마우스 클릭 - 'Git Bash Here' 를 클릭해서 창을 연다.
2. 해당 폴더를 깃이 관리할 수 있는 저장소로 변경한다.
로컬 폴더에 .git 폴더가 생성되어있다면 이미 git 저장소인 상태이므로 생략해도 된다.
$ git init
3. 현재 폴더에 있는 push되지 않은 새로운 파일들을 확인한다.
$ git status
빨간색이 뜨면 커밋되지 않은 새로운 파일!
이런 식으로 뜰 것이다!
Untracked files가 한 개 있다.
새로 생성한 파일이 이력관리 대상에 포함되지 않은 Unstracked files 목록에 표기되었다는 의미이다.
GIt의 Repository 구조는 크게 세가지로 구성되어 있다.
작업폴더(Working directory) > 인덱스(Staging Area) > 저장소(Head-Repository)
우리가 작업하는 폴더를 작업 폴더 (Working directory) 라고 부르며
commit을 실행하기 전에 작업 폴더와 저장소 사이에 존재하는 가상의 준비 영역(Staging Area)을 인덱스(Stage)라고 한다.
저장소에 commit하기 위해서는 add 명령어를 통해 파일(Untracked files)를 먼저 인덱스에 기록(Stage)한 후, 스테이징된 목록만 최종적으로 commit 명령을 통해 (개인) 저장소에 공개하게 된다.
4. 인덱스에 파일을 추가(Stage)한다.
$ git add 파일명
혹은
$ git add . (모든 파일/폴더를 올리는 것)
git add [파일명] 을 통해 해당 파일을 인덱스에 Stage한 뒤 git status를 확인해보면
Changes to be committed: 라는 표기로 바뀐 것을 확인할 수 있다.
해당 목록에 있는 파일은 Staged된 상태라는 것을 의미한다.
만약 인덱스에 추가된 (git add한) 파일을 제외하려면 git rm --cached [파일명] 명령을 사용한다.
5. 개인 저장소에 변경사항을 확정한다. (git commit)
인덱스에 추가된 파일을 HEAD에 적용해보도록 한다.
-m 옵션을 사용하면 describe처럼 간략하게 뜨는 메시지를 적을 수 있다. git commit -m "커밋메시지"
-a 옵션을 사용하면 스테이징 절차(git add)를 생략하고 바로 add&commit을 동시에 할 수 있다. git commit -a {파일명}
$ git commit -m "메시지"
n개의 파일이 changed됐다는 메시지가 뜨면 정상이다.
6. 이제 깃허브에 있는 레파지토리 주소를 가져와서 해당 디렉토리에 새 리모트를 추가하는 것을 진행해야한다.
내가 올릴 레파지토리에 가서 'Code' 버튼을 누르면 뜨는 해당 주소를 복사한다. (복사할 때는 오른쪽에 있는 버튼 누르면 된다!)
다시 bash창에 와서 다음 명령어 뒤에 복사한 주소를 붙여 넣는다. (ctrl+v가 먹히지 않으니 오른쪽 버튼으로 하면 된다.)
7. 로컬 저장소를 원격 저장소로 연결한다.
$ git remote add origin [레파지토리 주소]
위에서 설명한 내용이니 생략하겠다.
8. 잘 연동되고 있는지 알아본다.
$ git remote
좀 더 자세한 정보를 원하면
$ git remote -v
해당 명령어를 입력하면 아래와 같이 프로젝트와 연관된 원격지 주소가 출력되게 됩니다.
9. 현재 프로젝트의 커밋된(HEAD) 내용을 원격 저장소로 내보낸다.
$ git push <원격 저장소명> <branch명>
본인은 아래처럼 입력했다.
$ git push origin main
원래 $ git push origin master 였는데 작년부터 흑인 문화를 지지하고자(master slave가 인종차별적 발언으로 인식될 수 있다고 한다) 기본 브랜치가 master에서 main으로 변경되었다!
추가 정리
1. 로컬 폴더에서 연결된 저장소를 다른 저장소로 변경하는 방법
github에서 레파지토리 이름이 바뀌면 url도 바뀌겠죠? 이때 연결해논 url을 바꿔야 합니다.
로컬 폴더에서 연결된 저장소를 다른 저장소로 변경하는 방법은 간단합니다.
$ git remote set-url {지정한 원격 저장소명} {저장소 url}
예시) $ git remote set-url origin https://github.com/BananMoon/Healing4u-MobileWeb.git
2. 로컬 디렉토리의 폴더는 유지한 채 git 저장소에서만 폴더 삭제하는 방법
git을 연동하여 commit & push 하던 중 bin 폴더와 src 폴더를 모두 commit & push를 해서 bin 폴더는 git 저장소에서 삭제하고자 한다.
$ git rm --cached -r {삭제하고자하는 폴더}/
$ git commit -m "delete {folder}"
3. 원격 저장소를 로컬 저장소의 파일들로 강제로 덮어씌우는 방법
원격 저장소에 다른 파일들을 덮어 씌워야할 때 사용한다.
$ git push -f {원격 저장소명} {브랜치명}
예시) $ git push -f origin main
'유용한 모든 것' 카테고리의 다른 글
[Review] 객체 지향의 사실과 오해 (0) | 2021.12.15 |
---|---|
[IT 포스팅] 개발자 생산성 습관에 대한 개발자들의 생각 (0) | 2021.12.06 |
28회 ADsP 데이터분석 준전문가 합격 후기 (0) | 2021.04.09 |
티스토리에 PDF 올리기 (구글 드라이브 이용) (0) | 2021.04.01 |
jupyter notebook을 html로 전환하기 (2) | 2021.02.17 |