Tech Stock logo Tech Stock

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를 눌러서
자신의 리포지토리로 복사하는 것이다.

Github에서 다른이의 리포지토리 방문

Fork를 누르게 되면 다음과 같이 잠시 기다리라는 문구가 나오면서
자신의 리포지토리로 복사된것을 확일할 수 있다.

Github에서 다른이의 리포지토리 방문 후 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