컴퓨터 속에만 잇는 저장소(로컬 저장소)가 아닌,
인터넷 세상 어딘가(원격)에 있는 다른 컴퓨터 속의 저장소
사용하는 이유 : 백업, 협업을 위해
파일을 올리는 것이 근본적인 목적이 아닌 Github는 버전을 올리는 것 (구글드라이브, 네이버 마이박스와의 차이점)
클론(clone) : 원격 저장소를 복제 하기 = 다운로드
푸시(push) : 원격 자정소에 밀어 넣기 = 업로드
패치(fetch) : 원격 저장소를 일단 가져만 오기 (가져오되 병합하지는 않음)
풀(pull) : 원격 저장소를 가져와서 합치기 (패치 + 병합)
모든 버전들이 같이 복제
.git 파일도
명령어 git clone <주소>
origin : 원격저장소에 붙은 일종의 별명
origin/main : 원격 저장소 origin의 main
origin/HEAD : 원격 저장소 origin의 HEAD
로컬환경에서의 HEAD, 원격저장소의HEAD가 다를 수 있음
명령어 : git push origin main
git push -u origin main
= git push
(한번만 이렇게 입력하면 계속 origin main
생략가능)
git fetch origin main
명령어 : git pull origin main
git pull -u origin main
= git main
Q) 작업을 하려면 어차피 머지를 해야할텐데, pull을 안하고 fetch를 쓰는 특수한 경우가 있나요?
A) 같은 부분을 다르게 수정한 경우, 충돌이 일어날 수 있기 때문에 패치를 사용한다.
Q) pull할때 conflict가 발생할 수 있나요?
A) 풀도 병합이기 때문에 충돌이 발생할 수 있다.
git checkout FETCH_HEAD 명령어 사용 시 아래와 같이 오류가 발생하였다.
$ git checkout FETCH_HEAD
error: pathspec 'FETCH_HEAD' did not match any file(s) known to git
해당 에러는 로컬 저장소의 git과 리모트 저장소의 git 정보가 동기화 되지 않아서, 새로 만들어진 리모트 저장소 브랜치를 참조할 수 없기에 발생하는 에러다.
그러므로 아래 명령어로 원격 브랜치를 업데이트 한 뒤 checkout을 실행하면 잘 동작한다!
git remote update
git checkout 브랜치명
나는 git checkout main
명령어 사용 후 checkout 하였더니 해결되었다. 여길 참고해서 해결했다.
일반적으로 내가 소유하지 않은 원격 저장소에 푸시할 수 있을까?
일반적으로는 NO!
collaborator - add peolpe 추가하면 가능은 함 (push자격을 주고 싶은 계정을 추가하여 권한을 줌, 일반적으로 사용하는 기능은 아님)
push권한은 최소로 하는 것이 좋음
원격 저장소가 내 변경사항을 pull하도록 owner에게 요청(request)을 보내는 방식
owner가 요청을 검토해보고 승낙/거부
git clone 클론붙여넣기
- cd <폴더이름>
git branch work
- git checkout work
- vi index.html
- <li>leemiyeon</l>
- git add index.html
- git commit -m "work done"
git push origin work