-
나만의 git 정리Code Etc/Git 2023. 11. 10. 19:01반응형
혼자 버전관리
Git이란 유용한 버전관리 시스템이다.
git cloud에 파일을 업로드하면 어느 컴퓨터에서도 작업을 할 수 있다.
로컬 저장소에서 init명령어를 통해 git을 생성하고 이를 원격저장소와 연결하면
깃에 내 로컬 저장 폴더와 같은 repository가 생성된다.
로컬에서 작업 후 git add를 하면 작업한 내용이 workspace로 이동되어
git에서 해당 파일에 대한 로그를 추적한다.
수정을 하고 변곡점에 따른 commit을 하면 savepoint처럼 기록된다.
git log를 통해 우리가 저장한 savepoint 즉 커밋 지점을 볼 수 있고
해당 ID로 checkout을 하면 저장한 포인터로 이동하여 파일도 바뀐다.
로컬에서 커밋한 내용들을 push를 통해 git에 업로드하면 우리의 커밋과 메세지들이 해당 repo에 반영된다.
새로운 pc에서 작업을 하려면 repo주소를 복사하여 clone하면 새로 작업하려는 pc에 셋팅이 완료된다.
새로운 pc에서 마찬가지로 작업을 하고 git에 push를 한다면 기존 pc에서 이 변화를 인지해야 한다.
바뀐 내용을 기존 pc에 적용하기 위해 다시 clone하는 게 아니라 pull을 통해 가져오면 된다.
다른사람과 버전관리
다른사람과 버전관리를 함께 하기 가장 쉬운 방법은 branch이다.
branch는 말그대로 가지인데 기존의 코드는 그대로 두고 새로 뻗어나와서 작업하는 것이다.
내가 branch에서 작업한 내용은 원본에 아무 영향이 가지 않는다.
이렇게 여러 사람이 각자 branch를 만들어 작업하고 나중에 합치면 된다.
branch명령어로 branch를 생성할 수 있고 커밋과 푸시는 똑같다.
그리고 merge를 하면 합쳐지는데 기준이 있다.
원본(master)를 기준으로 합치면 원격 저장소에 합쳐진 내용이 새 커밋 지점이 되고
내가 생성한 브랜치를 기준으로 원본을 합치면 내 브랜치에 합쳐진 커밋지점이 생성된다.
다른 사람들이 작업을 할 때 원본을 가져와서 작업하기 때문에
바로 master를 기준으로 합쳐도 되지만 내가 생성한 브랜치에서 먼저 master와 합쳐보고
충돌이 있거나 버그가 있으면 해결하고 master로 합치는 게 좋다.
그리고 무작정 master로 합치는 게 아니라 함께 작업하는 사람들에 동의를 받고 합치는 게
pull request이다. 이렇게 하면 내가 커밋한 내용을 다른사람들이 모두 승인했을 때 원본 브랜치에 합쳐지게 된다
컨트리뷰터로 참여하기
내가 어떤 프로젝트에 컨트리뷰터로 참가하고 싶다면 해당 원격저장소를 fork하면 된다.
fork는 평행우주를 생성한다고 보면 이해하기 쉽다.
그리고 원하는 작업을 한 후에 new pull request를 하면 내가 만든 원격저장소의 변화를 base(복사한 repo)에 전달한다
코멘트를 달아서 pull request를하면 된다.
그러면 원격저장소 주인이 인사이트에서 내가 보낸 풀리퀘스트를 확인하고 맘에들면 approve, 코멘트만 달면 comment,
수정요청하면 request changes를 선택할거고 만약 approve가 되었으면 원격저장소 주인이 merge pull request를 끝내면
내가 작성한 코드가 해당 프로젝트에 반영된다.
이런 상황이 있을 수 있다
내가 fork한 이후에 다른 코드가 원본 저장소에 반영되고 나는 또 수정해서 풀리퀘스트를 했는데
이 사이에 충돌이 나는 경우,,이럴 땐 패치가 필요하다.
새로운 원격저장소를 등록하는데 upstream이라는 이름으로 원본저장소의 이름을 추가하여 추적하게 한다.
그리고 내가 작성하고 있는 로컬저장소에서 해당 upstream을 fetch하면 upstream에 반영된 커밋정보를
내 로컬 저장소에도 반영할 수 있다.
그리고 만약 내가 새로운 기능을 반영해서 풀리퀘스트를 보내려고 하는데 내가 base로 삼은 커밋이 너무 옛날버전이라
충돌이 계속 일어난다면 rebase(재배치)를 통하 base의 최신 커밋에서 작업을 한 것처럼 속일 수 있다.
이거는 위험한 행동이기에 나 혼자 사용하는 repo에서만 사용해야 하며 강제 push를 통해서 이력을 재배치한 후에
보내고자 하는 원본 저장소에 풀 리퀘스트를 보내면 된다...
반응형'Code Etc > Git' 카테고리의 다른 글
나만의 Git 정리 part 2 (1) 2023.11.14 [Git] Git 명령어 총망라, 이제 나도 GitMaster! - CodeHan의 코딩공부 (0) 2022.07.12