Github에서 코드를 가져오기 위한 방법으로는 총 4가지가 있다.
(1) git clone 명령
(2) npx degit 명령
(3) fork 해오기
(4) git pull 명령
이 4가지 방식의 사용법과 특징을 알아보자.
git clone
<사용법>
1. 복제하려는 Github repository로 가서 <코드>를 눌러 주소를 복사
2. git clone 하기
git clone {주소} {파일이름}
// {파일이름}은 저장소를 복제할 위치를 지정하는 것(생략가능)
// Github에서 저장소를 clone하면 origin remote에 저장소 주소(clone한 저장소)가 저장됨
ls
// 복제 잘됐는지 확인
3. .git 폴더 삭제하기 (git 이력 지워야 하는 경우)
ls -a
// 모든 파일 보기
rm -rf .git
// .git 폴더 삭제
ls -a
// 제대로 삭제됐는지 재확인하기 (에러 방지 차원)
4. 저장소 다시 생성하기
git init
5. Github에 새로운 repository 만들고 주소 복사해오기
6. 새로운 저장소에 연결하기
git remote add origin {새로운 저장소 주소}
7. 커밋 내역 확인하기
git status
// No commits yet
// Untracked files
8. 스테이징 하기
git add .
// 모든 파일
git status
// 재확인
9. 커밋하기 (커밋 메시지 입력 필수)
git commit -m "메시지"
10. 원격 저장소에 push 하기
git push origin main
<특징>
1. 원격 저장소에 있는 것을 내 로컬로 가져온다
2. 원격 저장소의 내용과 로컬 저장소의 내용이 일치하게된다
3. remote 설정이 자동으로 된다 *git pull과의 차이점
4. git 이력 있음 (=git 히스토리를 가져온다 =버전관리를 가져온다) *degit, pull과의 차이점
→ 확인방법: git remote -v // 현재의 git 프로젝트에 연결되어있는 repository 확인 가능 (=clone한 저장소의 remote정보를 확인 가능)
5. git 이력을 없애려면 추가적으로 명령어를 입력해줘야함 (따라서 상황에 따라 degit이 편할 수도 있음)
rm -rf .git
npx degit
<사용법>
1. 복제하려는 Github repository로 가서 코드를 눌러 주소를 복사
2. 터미널에 명령어 작성
npx degit {주소} {파일이름}
// *npx: npm 패키지 설치 없이 일회성으로 사용할 수 있는 node.js 명령어
*degit: Github에 있는 특정 원격 저장소를 현재 로컬에 다운로드
// {파일이름}은 저장소를 복제할 위치를 지정하는 것
<특징>
1. 원격 저장소에 있는 것을 내 로컬로 가져온다
2. git 이력 없음(= .git 파일을 가져오지 않음 =버전 관리가 없는 새로운 프로젝트를 가져온다)
fork
<사용법>
(fork 사용법을 알면 clone과 pull까지 알 수 있음)
1. 복제할 원격 저장소(A라고 지칭하겠다)에서 fork 버튼을 누른다
→ 내 Github에 똑같은 원격 저장소가 생긴다
2. clone해서 로컬에 나의 저장소가 생기게 한다
git clone {내 원격저장소 주소} {파일이름}
// 여기서 "내 원격 저장소 주소"란 fork해서 내 Github에 복제된 저장소를 말함
3. 클론한 내 저장소로 이동한다
cd {파일이름}
4. A저장소를 upstream으로 등록한다
git remote add upstream {A저장소 주소}
// A저장소 주소를 (upstream이라는 별칭의) 원격 저장소로 지정한다
// A저장소와 내 로컬 저장소와 싱크를 맞추는 과정 (두 저장소의 연결고리를 만들기)
5. 모든 remote 저장소를 업데이트 한다
git remote update
6. 로컬로 가져올 브랜치를 지정한다
git checkout -t upstream/{브랜치이름}
7. upstream 저장소(A저장소)에 있는 커밋내역을 로컬로 당겨오기
git pull upstream
*아래 명령어는 특정 브랜치만 당겨올 경우에 사용
git pull upstream main
// git pull {원격 저장소의 별칭} {원격 저장소에서 받아오고자 하는 브랜치의 이름}
// upstream 저장소(A저장소)에 main브랜치에 있는 커밋내역을 당겨오기
8. A저장소에서 당겨와서 업데이트한 내용을 다시 내 원격저장소(main브랜치)에 보낸다 (싱크맞추기)
git push origin main
<특징>
1. 다른 원격 저장소에 있는 것을 내 원격 저장소로 가져온다
→로컬로 가져오려면 따로 clone을 해야함
2. git 이력 없음 *clone과의 차이점
3. Github 자체에서 제공하는 기능
git pull
<사용법>
git init
// git 프로젝트를 시작한다
git remote add origin {주소}
// 주소를 (origin이라는 별칭의) 원격 repository로 지정한다
git pull origin main
// git pull [원격 저장소 이름] [브랜치 이름]
// 원격 리포지토리를 현재 main에 병합한다
<특징>
1. 원격 저장소에 있는 것을 내 로컬로 가져온다
2. remote 설정을 자동으로 하지 않는다 *clone과의 차이점
3. 원격 저장소의 내용을 가져와서 현재 브랜치와 병합(merge)까지 실행한다 (기존 작업 유지하면서 새로운 코드 추가 가능)
4. git 이력 없음 *clone과의 차이점