git worktree

mohadang·2023년 6월 25일
0

Git

목록 보기
10/16
post-thumbnail

worktree 작업 흐름

git branch를 사용하여 병렬 작업을 할 수 있지만 worktree를 사용해서 병렬 작업을 할 수 있따. worktree는 branch와 비슷하며 다만 worktree는 새로운 디렉터리에 복사를 하여 작업을 한다는 점에서 차이점이 있다

현재 작업중인 hello-rust라는 git 레포지터리가 있다

버그 수정 작업을 하고 싶어서 bugfix라는 worktree를 추가하였다. bugfix에는 hello-rust의 git 로그도 그대로 포함되어 있으며 커밋 번호까지 같다. worktree 추가는 git worktree add <path> 명령어로 추가 가능 하다

git worktree list 명령어로 현재 worktree 상태를 확인할 수 있다

bugfix에서 bug를 고치는 커밋을 추가함으로서 작업을 완료 하였다.

완료된 작업을 반영하기 위해 머지 작업을 해야한다. 머지는 git merge <name>으로 branch 머지하는것과 같다

worktree는 branch 작업과 매우 비슷하다.

주의할 것은 같은 branch를 가리키는 복수의 작업트리를 두는 것은 불가능 하다.

$ git checkout -b branch1
$ git worktree add ../branch2
$ cd ../branch2
$ git checkout branch1
fatal: 'branch1' is already checked out at '...'

ETC

제거
git worktree remove <name>

생성될 작업트리 브랜치 이름을 -b 옵션으로 지정
git worktree add <path> -b <branch>

현재 커밋이 아니라 에 해당하는 커밋으로 작업트리를 checkout
git worktree add <path> <commit-ish>

브랜치를 생성하지 않고 현재 브랜치에서 detached HEAD를 만들어 checkout
git worktree add <path> <commit-ish> --detach

존재하는 작업트리의 위치를 로 이동
git worktree move <worktree> <newpath>

생성한 작업트리 디렉토리에 있는 .git 파일에는 메인 작업트리 디렉토리를 가리키는 경로가 적혀있다.

/project/main$ git worktree add ../bugfix
/project/main$ cat ../bugfix/.git
gitdir: [...]/project/main/.git/worktrees/bugfix

메인 작업트리안의 .git/worktrees 폴더에는 작업트리 별로 HEAD 등의 파일이 저장되어 있다.

/project/main$ ls .git/worktrees/bugfix
HEAD  ORIG_HEAD  commondir  gitdir  index  logs
profile
mohadang

0개의 댓글