GitNotes.44-2.md
본 문서는 Git Notes for Professionals (라이센스:CC-BY-SA) 를 한글로 번역한 문서입니다. 번역상 오류가 있을 수 있으므로 정확한 내용은 원본 문서를 참고하세요.

Section 44.2: Worktree 이동시키기

현재에는 (버전 2.11.0 기준으로) 기존에 이미 존재하고 있던 worktree 를 이동시키는 git 내장 기능은 제공되고 있지 않으며, 이는 공식적인 bug 로 기술되어 있다 (참고: https://git-scm.com/docs/git-worktree#_bugs).

역주: 해당 페이지를 번역 시점에 방문시 관련 내용이 기술되어 있지 않으며, 대신에 git worktree move <worktree> <new-path> 와 같은 명령어 설명이 있는 것으로 보아 현재에는 정식 지원하는 것으로 보입니다.

이러한 제약사항을 극복하기 위해서, .git reference 파일들에 대한 직접적인 수정을 통해 해결을 시도해 볼 수 있다.

이 예제에서는, repo 의 주 사본이 (main copy) /home/user/project-main 에 존재하고 있으며 보조적인 worktree 는 /home/user/project-1 에 위치해 있는 상태에서 /home/user/project-2 로 이동을 하고자 하는 상황을 가정하고 있다.

아래에 소개된 단계를 진행함에 있어서 중간에 다른 git 명령어를 수행하지 않도록 한다. git 의 garbage collector 가 동작하여 보조적인 tree 에 대한 reference 가 유실될 수 있다. 첫 단계부터 마지막 단계까지를 중단 없이 연속적으로 수행하도록 한다:

  1. worktree 의 .git 파일이 주 사본 tree 내의 새로운 위치를 가리키도록 변경한다. /home/user/project-1/.git 파일이 아래와 같은 내용을 갖게 될 것이다:
    gitdir: /home/user/project-main/.git/worktrees/project-2
  2. 주 사본의 .git 디렉토리 내의 worktree 이름을 아래와 같이 변경한다:
    $ mv /home/user/project-main/.git/worktrees/project-1 /home/user/project-main/.git/worktrees/project-2
  3. /home/user/project-main/.git/worktrees/project-2/gitdir 내의 reference 가 새로운 위치를 가리키도록 변경한다. 이 예제에서는, 해당 파일이 아래와 같은 내용을 갖게 될 것이다:
    /home/user/project-2/.git
  4. 마지막으로, worktree 를 새로운 위치로 이동시킨다:
    $ mv /home/user/project-1 /home/user/project-2

위 과정을 정확하게 수행하였다면, 존재하는 worktree 들에 대한 목록 요청은 새로운 위치를 반영하여 결과를 출력하게 될 것이다:

$ git worktree list /home/user/project-main 23f78ad [master] /home/user/project-2 78ac3f3 [branch-name]

이 단계에서는 git worktree prune 을 수행하여도 안전하다.

[출처] https://books.goalkicker.com/GitBook/ (CC BY-SA)

반응형

+ Recent posts