Git 원격 협업: clone·pull·push·.gitignore 실전 패턴
push
-
로컬 저장소에서 관리한 버전 이력을 원격 저장소(github)으로 업로드 하는 명령어
$ git push origin master
-
참고
$ git push -u origin master # 여기서 -u는 최초 1회만 붙이면 됩니다. (최소 1회 push 할 때만 붙이자!)
pull
- 원격 저장소의 변경 사항을 받아옴(업데이트)
- commit 내역을 기반으로 변경 사항을 새로 갱신하는 행위
$ git pull origin master # git아 pull(업데이트 해줘) origin 이라는 원격 저장소로부터 master 브랜치를!
$ git pull origin master
remote: Enumerating objects: 4, done.
remote: Counting objects: 100% (4/4), done.
remote: Compressing objects: 100% (3/3), done.
remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (3/3), 739 bytes | 67.00 KiB/s, done.
From https://github.com/IT3AI1/TIL
* branch master -> FETCH_HEAD
d2c6be1..29e2c44 master -> origin/master
Updating d2c6be1..29e2c44
Fast-forward
README.md | 2 ++
1 file changed, 2 insertions(+)
create mode 100644 README.md
- 원격저장소에
read.me
를 추가한 후 pull을 한 결과이다.
clone
- 원격 저장소 전체를 복제
-
최초 1회만 수행
- 클론 받은 프로젝트는 자동으로
.git
이 설정되어 있음 (+remote
도 등록되어 있음)- 복제한거니까!
$ git clone 복제할저장소URL
만약 원격 저장소의 이름이 아닌 다른 이름으로 폴더를 clone 받고 싶다면?
$ git clone 원격저장소URL clone받을폴더이름
# 예시
$ git remote add origin https://github.com/IT3AI1/TIL.git TIL-test
push & pull(+clone) 시나리오
최초 1회 clone 이후 add, commit, push & pull, add, commit, push
gitignore
git이 어떠한 폴더 / 파일의 버전 관리를 무시할 수 있도록 적어두는 문서 -> 여기에 적힌 내용은 git이 버전 관리를 하지 않습니다.
- 일반적으로 개인정보 및 특정 사람에게만 적용되는 개발 환경과 같은 설정이 포함됨
- 개발할 때 사용하는 secret key, (보안상의 이유로) github과 같은 원격저장소에 업로드되면 안되는 정보 등은 git이 버전 관리를 하면 안됨
- 그리고 버전 관리가 필요없다고 생각되는 폴더 혹은 파일도 포함 시킬 수 있음
.gitignore
파일을 만들어서 관리한다.- 일반적으로
git init
을 진행하기 전에 만든다.
practice # 특정한 폴더를 git이 관리하지 않게함
a.txt # 특정한 파일을 git이 관리하지 않게함
*.txt # 특정한 확장자를 가진 파일을 git이 관리하지 않게함
gitignore.io
https://gitignore.io/
-
.vscode
/.DS_Store
-> 보안상의 이유가 아니더라도 버전 관리의 필요성이 없는 친구들이 존재..! - 미리 특정한 언어, 프레임워크, 운영 체제 등에서 git으로 버전 관리를 할 필요가 없는 요소를 누군가! 미리 만들어 놓았음
- 언어, 프레임워크, 운영체제 등을 검색하고 ‘생성’ 버튼을 누르면 자동으로 필요한 내용을 만들어 준다.
다시 정리!
- gitignore는 어느 시점에 만드는 것이 좋을까요?
- git init 전/후
- gitignore 파일이 위치하는 곳은 어디일까요?
- 일반적으로
.git
폴더가 존재하는 곳에 생성
- 일반적으로
push error
$ git push origin main
To https://github.com/IT3AI1/practice.git
! [rejected] main -> main (non-fast-forward)
error: failed to push some refs to 'https://github.com/IT3AI1/practice.git' # 거절됨...
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Integrate the remote changes (e.g.
hint: 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
해석
# 원격 저장소로 push하는 것을 실패했음..
error: failed to push some refs to 'https://github.com/IT3AI1/practice.git'
# update가 reject되었는데 왜냐면... remote에 local 없는 어떤 변경 사항이 있음...
hint: Updates were rejected because the remote contains work that you do
# 이러한 상황은 커밋이 다른 경우에 발생하는데.. remote 저장소와 local 저장소를 일치 시켜야 할 것 같음...
hint: not have locally. This is usually caused by another repository pushing
hint: to the same ref. You may want to first integrate the remote changes
# 어.. git pull 한번 해볼래?? 언제?? 다시 push 하기 전에...
hint: (e.g., 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
- 로컬 저장소(내 컴퓨터)와 원격 저장소(github)의 commit 이력을 비교해본다!
- 이 문제는 로컬 저장소와 원격 저장소의 commit 이력이 다르기 때문에 발생하는 문제
- 주로 집에서 push를 하고 강의장에 가서 pull하지 않은 채로 작업하고 add, commit 이후에 push를 하면 보게 되는 메시지
- 로컬 저장소에서
$ git pull origin master
를 진행한다. - vs code 창이 나오면 text 파일을 x 버튼을 눌러서 종료 한다.
- 이때 vs code 창이 열리지 않는 경우도 있기 때문에 당황하지 말 것!
댓글남기기