Git, Github

생활코딩 : GIT -9.협업, pull & push 오류, fetch

식초 2020. 9. 7. 22:09

혼자 작업하기

git init a : a라는 디렉토리를 만든다

cd a : a 디렉토리 안에서 A라는 사람이 혼자 작업한다

nano work.txt > 1이라는 내용을 적는다

git add work.txt : stage area로 올린다

git commit -m "work 1" : 버전을 생성한다

 

백업을 하기 위해 원격저장소를 만든다

깃허브 > 저장소를 만든다> 주소 복사

git remote add origin 주소 :  지역 저장소에 원격저장소를 origin이라는 별명으로 추가한다

git push -u origin master : 지역 저장소의 master와 원격 저장소의 master를 직접 페어링(연결) 시켜준다.+ 업로드

여기서 오류가 뜬다 

 

오류가 떴다. 

찾아보니 유저의 SSH가 등록되지 않아 접근권한이 없어서 생기는 문제라고 한다

                                                            ->ssh키를 새로 생성하는 방법 (밑의 블로그를 보고 해결했다)

https://zeddios.tistory.com/120

 

MAC ) git 문제 Permission denied (publickey).

안녕하세요 :-) 오늘은 git을 쓰면서 발생할 수 있는 이슈에 대해서 설명드릴게요! 제가 지금 다른 노트북을 쓰게됐는데, 여기서 GitHub에 push나 clone하려니까 이런 오류가 나게 됩니다. git 입장에��

zeddios.tistory.com

>깃허브에 업로드 잘되었다.

 


같이 작업하기

-privite/ public 모두 승인해야 함

-셋팅에서 collaborators&team 탭으로 가서 메일로 협업자 추가한다

(2020.9.30 현재 해당 탭이 없어서 manage access 탭에서 추가했다. 밑은 도움을 준 블로그)

https://integer-ji.tistory.com/181

 

첫 협업, git 설정하기 - collaborator이 없을 때

첫 협업, git 설정하기 - collaborator이 없을 때 이번 프로젝트는 협업으로 진행한다. 그러기 위해 git을 사용하며 한 저장소에 여러 명이서 작업할 수 있는 환경을 만든다. 그리고 인터넷 검색하

integer-ji.tistory.com

-Admin | Write (여기까지 개발자의 권한) | Read 

-실습때는 서로 다른 저장소 사용해서 다른 개발자라고 가정하고 한다

(현재 실습하던 디렉토리=a, 새로운 디렉토리=b)

-hello-git-collaboration 디렉토리 안에 b라는 디렉토리를 클론한다

=git clone hello-git-collaboration깃허브 주소 b

 


협업할 때 push & pull 오류

디렉토리a

nano work.txt > 2a 파일 추가한다> 저장

git commit -am "work 2a" : 버전 만든다

git push : 원격 저장소로 올렸다

git log > 1 / 2a

디렉토리b

(원래 git pull을 해야되는데 깜박함)

nano work.txt > 2b 파일 추가한다 > 저장

git commit -am "work 2b" : 버전 만든다

git log > 1/ 2b

git push 하면 > rejected : 원격저장소에 다른사람이 작업한 것이 있는데 pull 안했기 때문

git pull

cat work.txt >에러가 난다

nano work.txt (수동 수정) >a와 b의 내용을 포함하는 방향으로

git add work.txt : 파일의 충돌을 해결했다

git status : 잘 수정되어 커밋된 걸 볼 수 있다

git commit : 깃이 자동으로 커밋 메세지 만들어준다 > 2ab(바뀐내용) 기록해주면 더 좋다

git log : 새로운 2ab 확인가능

git push : 원격 저장소로 새로운 2ab 업로드

디렉토리a

git pull : 수정된 내용 전체 원격 저장소에서 가져옴

디렉토리 a, b

git log > 저장소의 상태가 동일하다

 

교훈 : 최대한 빨리 작업하고 push 자주해야 충돌 적다, 작업 할 떼 pull을 통해서 다른사람이 작업한 것 확인하는 것은 중요 > commit, push, pull을 자주하게 된다.

 

 


협업을 할 때 가장 먼저,

git pull -> commit -> push 한다

=git fetch -> git merge FETCH_HEAD -> commit -> push

 

디렉토리a

HEAD -> master : 지역 저장소의 마스터 브랜치

origin/master : 원격 저장소 중 origin 저장소의 마스터 브랜치

75ff : 마지막으로 마스터 브랜치의 어떤 버전을 가져왔는지 의미

 

nano work.txt > 3a 추가 > 저장

git commit -am "work 3a"

git log > 마스터 브랜치는 work 3a 가리킨다, origin 마스터 브랜치는 75ff 가리킨다

>우리의 마스터 브랜치가 origin 마스터 브랜치 보다 하나의 버전이 앞서 있다.

git status > push 해야한다고 뜬다

git push

git log > origin 마스터 브랜치가 우리의 마스터 브랜치와 같은 브랜치를 가리킨다

디렉토리b

git fetch : (원격 브랜치만)당겨온다

cat work.txt > 3a의 내용이 없다!

git log

git status > 우리의 마스터 브랜치가 origin 보다 뒤쳐저 있다고 나옴 > git pull 하라고 함

| origin 마스터를 우리의 마스터 브랜치로 merge해도 된다 = git merge origin/master

git merge origin/master

 

즉, git pull = git fetch: git merge origin/master

fetch를 통해서 원격 저장소만 업데이트하고, origin과 master를 merge한 것과 같은 효과를 낸다

.

.

(항상 어떤 브랜치와 병합할지 신경쓰는 것은 귀찮기 때문에)

.git/FETCH_HEAD : .git 안에 FETCH_HEAD라는 파일 만든다

cat .git/FETCH_HEAD > f72aeb는 원격저장소의 가장 최근에 merge한 내용

git fetch: git merge FETCH_HEAD : (.git/FETCH_HEAD를 했기 때문에) f72aeb을 참고해서 가장 최근에 fetch했던 내용을 merge해준다. > git merge origin/master 와 같은 기능이다 > 좀 더 편리함

 

 

결론 : 신중하게 git의 데이터를 가져오고 싶을 때, 결합은 나중에 하고 가져오는 것부터 하려고 할 때, fetch 사용한다.

복잡하면 그냥 pull쓰면 된다.

 

 


code review 도구들

Gerrit : 구글에서 안드로이드 프로젝트 실행.. 투표소.. 

github : 이슈 트레커, 인사이트(통계기능)

 

어떻게 팀에 git을 도입할 것인가?

-파일의 이름을 더럽히지 않아도 된다..ㅎ(최종,,최최종...)

-버전 간의 차이점 비교 가능

-과거~현재로 언제든지 돌아갈 수 있다

-5분 이내 발표

-최대한 익숙한 것처럼 소개하기(ex.드롭 박스랑 똑같아~)

-어려운 개념들을 말하지 말기