2 분 소요


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

image

만약 원격 저장소의 이름이 아닌 다른 이름으로 폴더를 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

image-20210705173745218


gitignore

git이 어떠한 폴더 / 파일의 버전 관리를 무시할 수 있도록 적어두는 문서 -> 여기에 적힌 내용은 git이 버전 관리를 하지 않습니다.

  • 일반적으로 개인정보 및 특정 사람에게만 적용되는 개발 환경과 같은 설정이 포함됨
    • 개발할 때 사용하는 secret key, (보안상의 이유로) github과 같은 원격저장소에 업로드되면 안되는 정보 등은 git이 버전 관리를 하면 안됨
  • 그리고 버전 관리가 필요없다고 생각되는 폴더 혹은 파일도 포함 시킬 수 있음
  • .gitignore 파일을 만들어서 관리한다.
  • 일반적으로 git init 을 진행하기 전에 만든다.
practice # 특정한 폴더를 git이 관리하지 않게함
a.txt # 특정한 파일을 git이 관리하지 않게함
*.txt # 특정한 확장자를 가진 파일을 git이 관리하지 않게함

image


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.
  1. 로컬 저장소(내 컴퓨터)와 원격 저장소(github)의 commit 이력을 비교해본다!
    • 이 문제는 로컬 저장소와 원격 저장소의 commit 이력이 다르기 때문에 발생하는 문제
    • 주로 집에서 push를 하고 강의장에 가서 pull하지 않은 채로 작업하고 add, commit 이후에 push를 하면 보게 되는 메시지
  2. 로컬 저장소에서 $ git pull origin master를 진행한다.
  3. vs code 창이 나오면 text 파일을 x 버튼을 눌러서 종료 한다.
    • 이때 vs code 창이 열리지 않는 경우도 있기 때문에 당황하지 말 것!


References

댓글남기기