아래글은, 제가 처음에 git을 브랜치 나누는거는 이해가 되는데,
여러명에서 같이 작업할때는 어떻게 해주는지 개념 이해가 안되서,
오랫동안 고민하고, 여려명과 협업 하면서 터득한겁니다.
자신이 git사이트나 여러 설명문서들을 봐도, 이해가 잘 안될때, 여려명이서 관리하는 법이 이해가 안될때,
읽어주세요~!
이건 진짜, 처음 하시는 분들에게 도움이 되고자 한거니까,
좀 쓰시는 분들이 보기에는 너무 쉽게 생각하실 수 있는데, 편하게 봐주세요~!!
----------------------------------------------------------------------------------------
혼자서, git을 쓸때는 그냥 혼자 히스토리 관리용으로 썼는데,
여러명이 쓸때는 개념이 이해가 잘 안되었다.
먼저, 1개의 브랜치(Master)에서만 작업하는 개념으로 설명해 주겠다.
브랜치, 머지는 뒤에 설명하겠다.
제일 중요한거는 마지막사람이 파일을 정리하는거다!
자! 간단하게, git은 마지막에 커밋하고, 푸쉬하는 사람이 최신정보이다.
merge작업은 마지막에 커밋하는 사람이 하면 되는거다!!
이게 제일 중요한 개념임!!
SVN같은 형상관리를 쓰다가, GIt으로 오면 처음에 이해가 안되는게,
다른거는 내가 checkout하면, 다른 사용자가, 파일을 못 건드리게 했는데,
git은 그런게 없다.
그러면 파일이 충돌이 났을때 어떻게 해야하나????
누가 수정한 파일이 최고 권한인가 하는거다..
3명의 작업자가 있다.
A, B, C, D라고 하겠다.
파일 1.txt, 2.txt파일 2개가 있다.
밑에 사진은 급하게 ppt에서 그린건데,
대충 저런식으로 흘러간다.
밑에 설명을 보시길
처음에 다들 클론해서 가져간다.
A 가 1을 수정했다.
그리고 스테이지에 올려서, 커밋까지 했다.
그러면 A 저장소에는 수정했고, 커밋할때의 히스토리를 가지고 있다.
여기서, A가 push를 하면, 서버에 있는 저장소(주저장소)에는 A가 수정한 정보가 최신정보가되었다.
여기서 B가 pull로 댕기면, B가 커밋한 정보가 없으니까, 바로 당겨진다.
C는 2.txt라는 파일만 수정을 하고 커밋을 했지만, pull 하지 않고, push하니까, 에러가 뜬다.
여기서의 에러는, 내가 가지고 있는 정보가, 최신이 아니라는거다.
벌써 서버에는 A가 가지고 있는 정보가, 최신이다.
그래서 최신으로 업데이트 하고, 푸쉬하라고 한다.
이 경우는 pull하고, 최신 히스토리로 업데이트 하고, 다시 push하면,
A가 커밋한게 최신 업데이트가 된다.
자, 여기에서 D 는 1.txt를 수정하고, push를 했는데, 에러를 토해낸다.
A가 수정을 하고, 커밋, push를 했기 때문에, 내 정보는 최신이 아니고, 파일이 중복으로 커밋됬기 때문이다.
이때는 fetch, pull를 하면,
>>HEAD
틀린 파일내용
<<
이런식으로 틀린거 알려주고, 파일이 합쳐진다.
fetch를 하면, 내가 가지고 있는 history가 최신이 되기 때문에,
수정하고, 저장한다음에 커밋하고, push를 하면 에러 없이 된다. 내가 최신의 사람이기 때문에, 다 받아들인다.
그래서, 최신 정보의 사람이 왕이 되는거다.
그래서 먼저, 서로 다른부분확인하고, 내가 다른사람꺼랑 내용을 보고, 수정을 한다.
그리고 커밋,push를 한다.
그러면, 내가 마지막으로 수정했기 때문에, 내꺼가 최신히스토리기때문에, 커밋 푸쉬가 된다.
결국, 마지막에 하는 사람이 갑인거다.
마지막에 하는사람이 다른사람꺼 다 날리고, 자기꺼로 복사, 붙이기 해버리면, 그냥 x되는거다.
git 쓰다가 에러 뜨면, reset해버리고, 그냥 자기커밋한거 되돌리기 하고,
pull로 댕긴다음에, 자기가 수정한거 복사해 놓았다가, 그냥 다시 덮어 쓰는 사람이 있는데,
이러면 즞되는거다.
그럴거면, 파일 못 건들게 하는 SVN쓰지, 왜 git를 쓰나 싶다.....
============================================================================
자, 위에까지가, 여려명이서 작업할때, 기본개념이다.
그 다음에 많이 듣는 브랜치, Merge는 멀까?
브랜치는 나무에서 가지치기 하는거다.
예로, 내가 로그인 부분만 수정해야된다.
근데, 다른데는 건들었다가, 에러가 뜰거 같다.
그러면, loginfix 브랜치를 하나 만든다.
그러면 만든 시점에서, 가지치기가 되는거다.
그리고, 그 브랜치에서 작업을 내 마음대로 한다. 파일을 지우던, 여러파일을 수정하던 상관없다.
그리고, 커밋하고, Master로 가서, loginfix를 Master브랜치에 merge시켜준다.
그러면, 새로운 머지한 정보가 새로 커밋이 생긴다고 생각하면 된다.
그리고 그전에 수정했던것과, Master와 합쳐지는거지, 다른 부분들이 있으면, fetch해줘서, 수정하고 합치고 해서
마지막 사람이 다시 커밋, 푸쉬 해주면 된다!