Git - remote, 서버에서 내려받거나 올리기 등 (4편)

Lina Hongbi Ko·2023년 1월 2일
0

Git

목록 보기
4/4
post-thumbnail

Git과 원격저장소(remote)를 이용해서 협업, 백업, 소통하기🐶

우리는 지역저장소(local repository)에서 작업을 하고, 커밋을 하고, 버전을 관리한다. 그런데 갑자기 컴퓨터가 먹통이 되거나 바이러스에 먹혀버려서 로컬에서 더이상 파일접근이 안된다면!?!??!
또는 다른 사람과 협업해서 일을 티키타카 해야하는데 매일 이동식디스크에 저장해서 주거나 메일을 주고받아서 일을 해야한다면?!?!?! 이건 정말 비효율적으로 일을 하는 것...

그래서 우리는 원격저장소 (remote repository)를 이용한다.

깃과 관련해서 가장 많이 사용하는 원격저장소는 'Github'이고, 깃허브에서 많은 것들을 할 수 있다. 온라인상에서 깃의 버전관리기능이 가능하고, 지역저장소를 백업할 수 있고, 협업을 위해 사용하고, 나의 개발이력을 남기고 또 오픈소스에도 참여할 수 있고 등등 많은 것들을 할 수 있다:)

Git과 Github를 이용해서 버전관리 하기

원격저장소를 지역저장소에 복제하기

git clone 원격저장소주소 복제할디렉토리이름
git clone 원격저장소주소 . (현재 디렉토리에 복제하기)

서버(remote repository)에 관련된 정보 확인

git remote -v (remote가 어떤 정보들을 가지고 있는지 확인)
git remote add origin(변수명) 원격저장소주소
(보통 origin을 변수명으로 사용하고, 다른 이름을 사용하거나 추가할 수 있다. origin은 서버의 메인 branch)
git remote show (remote repository의 브랜치들 확인)
git remote show origin (origin remote에 관한 정보 확인)

SSH(Secoure Shell)이용해서 원격접속

기본적으로 프라이빗키와 퍼블릭키를 한쌍으로 묶어서 컴퓨터를 인증해 원격저장소와 연결한다. (프라이빗키와 퍼블릭키를 사용해 현재 사용하고 있는 기기를 깃허브에 인증하는 방식)

SSH 키생성 : terminal -> 홈디렉토리로 이동 -> ssh-keygen 입력 -> ENTER -> ENTER -> 키경로확인 -> id_rsa: 프라이빗키, id_rsa.public: 퍼블릭키 확인 -> cd ~/.ssh -> ls -la -> 프라이빗키와 퍼블릭키파일이 있는 것을 볼 수 있음 -> cat id_rsa.pub -> 퍼블릭키 복사 -> 깃허브사이트 방문 -> setting -> SSH and GPG kyes -> title적고 퍼블릭키 붙여넣기

SSH주소를 원격저장소에 연결하기 : repository ssh주소 복사 -> cd ~ -> git init conntect --sh -> git remote add origin 복사한주소

로컬에서 작업한 내용을 remote로 올리기

지역저장소의 소스를 원격저장소로 올리는 것

git push 원격저장소주소 올릴 로컬 브랜치명
git push -u origin main
(원격저장소 origin에 현재 저장소의 main 브랜치를 올리는데 -u를 이용할 경우 방금 입력한 주소를 기억해두라는 의미이므로 한번만 이렇게 설정해두고 git push만 입력하면 자동으로 origin remote에 main 내용이 업로드됨)

서버의 변경사항들을 로컬로 내려받기

원격저장소에서 지역저장소로 내려받는 것.
서버에 있는 히스토리 가지고 오면서 나의 로컬에 있는 내용도 같이 merge함.

git pull 원격저장주소 내려받을 로컬 브랜치명
git pull origin main (origin의 내용을 main브랜치로 가져온다. -u옵션을 이용해서 push나 pull했으면 git pull만 해도 됨!)
git pull --rebase (서버에 있는 커밋을 가지고 와서 그 상태에서 로컬에서 만든 커밋을 위에다 적용)

✏️ github.com 기본 브랜치 이름을 master이 아닌 main으로 사용하라고 권장하므로 로컬 작업 폴더에 있는 기본 브랜치 이름을 main으로 변경해야함 >> git branch -M main (브랜치편에 나와있지만 한번더)

✏️ push & pull 하기전, 사용자의 이름과 메일주소를 잘 설정해 놓는 것이 중요! (협업시 헷갈리게 하지 않게 하기 위해)
git config --global -e -> [user] name = Hongbi email = rhghdql666@gmail.com 설정해놓으면 편함.

✏️ git push & pull을 하기 위해서는 repository의 manage access에 user을 추가해야만 해당 저장소에 git push & pull이 가능하다. (팀원의 아이디를 collaborators 메뉴에 등록해놔야 협업가능)

원격 브랜치 정보 가져오기

원격 브랜치에 어떤 변화가 있는지 그 정보만 가져온다. git pull 명령은 git fetch 명령과 git merge FETCH_HEAD 명령 두개를 합친 것과 같은 기능.
(FETCH_HEAD란 fetch로 가져온 원격 저장소정보가 origin/master 브랜치가 아닌 FETCH_HEAD라는 브랜치로 가져온다. 또한 지역저장소에 바로 반영되지 않는다.)

내가 현재 작업하고 있는 HEAD는 그대로 유지하면서, 서버의 업데이트된 히스토리 정보만 가지고 올 때 씀. 내가 서버에서 어떤일이 발생했는지 확인할 때 많이 사용한다.

git fetch 가져올 remote이름(origin)

패치한 후에 최신 커밋을 현재 브랜치에 합치려면 git pull 명령을 사용해서 소스를 내려받거나 git merge명령으로 FETCH_HEAD에 있던 커밋을 병합할 수 있다.

git fetch origin
git pull or git merge FETCH_HEAD 
// 패치 후 최신커밋 현재 브랜치에 합치기
// master(maini)브랜치로 이동 한뒤 병합
// 지역저장소의 최신 커밋과 패치한 커밋의 차이를 비교하려면 git diff HEAD orgin/master 입력.

✏️ 깃허브에서 협업할때는 여러사람이 함께 문서를 수정하고 push하거나 pull 하므로 동일한 파일 수정 후에는 conflict이 발생한다. 그렇기 때문에 반드시 작업 하기전에 원격 저장소의 최신 커밋을 풀한 다음에 자신의 커밋을 푸시해야한다.

✏️ git push는 다른 사람이 만든 파일이나 수정한 파일이 원격 저장소에 생기면 git push를 하지못한다. (원격과 로컬 내용이 다르면 로컬 저장소에서 git push가 안되는 이유는 코드가 꼬여버리는 것을 미리 예방을 해주기 때문이다) --> 그래서 push 전 pull하는 것 잊지 말기.

✏️ 협업에서 브랜치 사용

ex)

git pull -> git branch new -> vim f1.txt -> 
git add f1.txt -> git commit -m "feature1" -> 
git push origin new -> github.com에 push된 new branch의 New pull request 클릭 -> 
create pull request -> pull request 목록 클릭 -> merge pull request -> confirm merge

push한 브랜치는 풀리퀘스트(pull request)를 통해 병합해야 원격 저장소에 반영된다. 깃허브에서 협업할때는 보통 작업자마다 브랜치를 만들어서 진행하고, 작업 중간중간 풀리퀘스트를 보내서 master(main)브랜치에 병합한다.
(그래서 깃허브로 협업할때는 다른 작업자의 변경 내용을 바로 반영하기 위해 항상 pull부터 한 다음 자신의 작업을 진행하는 것이 좋다.)

✏️ 보통 push할때는 서버에 변동된 사항이 있다면 git pull or get fetch를 이용해서 나의 로컬 히스토리를 서버에 맞게 업데이트하고 그다음에 나의 commit들을 rebase해해서 push하는게 맞다.

오픈소스 프로젝트 참여

fork

다른사람의 repository에 접근 권한이 없다면 그 repository를 나의 repository에 동일하게 복사할 수 있다. 그리고 PR(Pull Request)통해 다른 사람 즉, 내가 복사하려는 repository의 관리자가 리뷰&제안&승인&거절을 한다.

✏️오픈소스 프로젝트 참가: fork -> clone(terminal:git clone 복사주소) -> cd 해당폴더 들어가기 -> git log보고 히스토리 체크 -> git switch -C fix(새로운 브랜치 만들면서 이동) -> open 해당파일 -> 버그나 코드 수정 -> git commit -am "fix" -> git push origin fix -> github홈페이지에서 fix브랜치가 업로드 되었다고 베너가 뜸 -> pull request -> compare & pull request 클릭 -> fix수정사항 적고 -> create pull request -> 오픈소스프로젝트관리자가 요청한 것을 보고 submit해줌

git 꿀팁

  • 디버깅 빠르게 하는 법 : git blame 파일이름 &
    git extension git lens 설치 -> 설치후 vscode 맨 우측 위 아이콘 보고 사용가능)
// ex)
git blame fixture/com/src/tags.js
// 커밋된 해시코드와 누가 언제 commit 했는지 나옴
  • 문제의 원인 찾는 법 : Bisect (이전에는 잘 동작했는데 요즘 들어 잘 안될때 사용하면 유용)
// git log에서 잘 작동되었던 commit의 해시코드 복사
git checkout 해시코드
git bisect strat 
git bisect good
git checkout master
git bisect bod
// 이렇게 하면 good과 bad 사이의 commit들 체크.
// 반복해서 good과 bad를 체크하면서 버그 찾기
  • tig 사용 : brew install tig 해서 설치 (윈도우는 tig사이트에서 보고 설치)
    tig는 히스토리 보면서 enter치면 커밋 안의 내용을 볼 수 있다. 검색도 가능한데 grep, vim 등 여러 명령어를 사용 할 수 있다.

  • 키보드 단축키 설정: alias 이용해서 단축키 만들기 하지만 지금은 배우고 많이 써야하는 단계니깐 나중에 잘 이용해서 쓰기.


from. 드림코딩아카데미 git마스터과정,
from. Doit! 지옥에서 온 문서 관리자 깃&깃허브 입문
from. 애플코딩 매우쉽게 알려주는 git & github

profile
프론트엔드개발자가 되고 싶어서 열심히 땅굴 파는 자

0개의 댓글