Git/Github에서 Clone 과 Fork의 차이
pull 과 fetch의 차이에 대해 알아보고 적절히 사용하도록 하자
Git/Github에서 Clone 과 Fork의 차이
pull 과 fetch의 차이에 대해 알아보고 적절히 사용하도록 하자
■ 먼저 clone과 Fork 에 대해
Clone
git clone url
이런식으로 클론을 하게되면
#현재의 current diretory 밑에
#자연스럽게 클론 리포지토리의 디렉토리가 생성되며 클론한다.
pwd
/github
git clone url
생략
/github/cloneRepo
지정 remote리포지토리를 내 컴터의 로컬로 복사하게 되는것이다.
Fork
이 경우는 다음과 같이
Github에서 누군가의 리포지토리에 방문했을때 Fork를 눌러서
자신의 리포지토리로 복사하는 것이다.
Fork를 누르게 되면 다음과 같이 잠시 기다리라는 문구가 나오면서
자신의 리포지토리로 복사된것을 확일할 수 있다.
상대방의 리포지토리를 나의 Remote리포지토리로 복사하는것이 Point
즉, Clone일 경우 Remote(내꺼든, 상대방이든) -> Local computer
Fork일 경우 Another User Remote Repository -> Github My Remote Repository 인 셈이다.
여기서 잠깐 !
그럼 git init은 뭐지? 라는 물음이 생길 것이다.
git init 의 경우에는 어딘가로부터 복사가 아닌,
자신이 직접 로컬컴퓨터에 디렉토리를 생성하고 그것을 git으로 관리할때 사용한다.
#이제부터 이 디렉토리는 git으로 관리 하겠다는것. initialization
git init
#remote 쪽에 push를 하기 위해서는 remote url을 지정해준다
git remote add origin url
특정 디렉토리에 들어가서 위와 같이 치게되면
그 폴더내에 .git이라는 디렉토리가 생성되면서,
그때부터 그 디렉토리+하위 디렉토리는 git으로 관리하게 된다
■ 이제 pull 과 fetch에 대해 알아보자
pull 도 remote repository의 내용을 로컬로 가져오는 것이고
fetch도 마찬가지로 remote repository의 내용을 로컬로 가져오는 것이다.
차이점은
pull은 merge를 하며 가져온다.
fetch는 merge를 하지 않고 remote쪽의 변화만 가져온다
■ pull의 사용
git pull origin master
pull은 다음과 같은 상황일때 많이 사용한다.
- 최초에 remote repository의 내용을 가져올때
- remote repository의 변동사항을 숙지하고 나의 local repository와의 conflict를 처리하며 진행할때
■ fetch의 사용
#fetch일 경우는 이렇게만 적으면 된다
git fetch
fetch의 경우는 다음과 같은 상황일때 많이 사용한다.
- 로컬에서 변동사항이 없는데 remote쪽의 변동사항만이 있을때
- 로컬에서 변동사항이 많이 있는 관계로, conflict를 피하면서 remote쪽의 변동사항만을 가져올때
■ conflict 처리
conflict가 발생하면 다음과 같이 내용이 나올것이다.
차이점에 대해서 잘 분석하고 적절히 대응해주면 된다.
<<<<<<< HEAD
# 내 로컬에서 작업한 내용
안녕하세요 저는 개발자 입니다.
=======
# 충돌이 발생한 리모트 리포지토리의 내용
안녕하십니까 저는 개발을 하는 사람 입니다.
>>>>>>> remoteRepo
대응이 끝나면 remote쪽에 push하는것을 잊지 말자.
#스테이징 작업을 한다(커밋할놈 선택) git add filename #커밋 한다 git commit -m "conflict 해결" #push한다 git push origin master