git-worktrees

2 개의 포스트

github

캔버스로 인터랙티브한 경험을 만드는 방법 (새 탭에서 열림)

캔버스 확장은 GitHub Copilot을 단순한 대화형 도구에서 시각적이고 상호작용 가능한 작업 공간으로 확장한다. 사용자는 정보를 직접 보고 클릭·편집하며 작업할 수 있고, 에이전트는 같은 캔버스를 실시간으로 갱신한다. 따라서 이슈 분류, 코드 구조 탐색, 워크트리 정리처럼 대화만으로 처리하기 어려운 작업을 더 직관적으로 수행할 수 있다. ## 캔버스의 작동 방식 - 캔버스는 GitHub Copilot 앱 안에서 에이전트와 개발자가 함께 사용하는 공유 인터페이스다. - 에이전트는 작업 과정에서 캔버스를 업데이트하고, 사용자는 클릭·편집·필터링 등으로 정보를 직접 조작할 수 있다. - 사용자의 상호작용은 에이전트에 전달되거나 캔버스 내부에서 로컬로 처리된다. - Copilot에 추가 기능이나 개선 사항을 요청하면서 캔버스를 작업 흐름에 맞게 계속 발전시킬 수 있다. - GitHub Copilot 앱의 에이전트 세션에서 `/create-canvas`를 입력한 뒤 원하는 인터페이스와 기능을 설명하면 생성할 수 있다. ## 시각적 이슈 트리아지 - 저장소의 GitHub Issue를 카드 형식으로 하나씩 보여준다. - 오른쪽으로 스와이프하면 처리할 이슈로, 왼쪽으로 스와이프하면 거절할 이슈로 분류할 수 있다. - 사용자의 선택에 따라 캔버스가 실시간으로 이슈를 적절한 그룹으로 이동시킨다. - 긴 대화나 명령 대신 빠른 제스처로 많은 이슈를 검토할 수 있다. ## 인터랙티브 코드베이스 다이어그램 - 프로젝트의 각 구성 요소를 노드로 표현하고, 컴포넌트 간 관계를 시각화한다. - 노드를 마우스로 이동하거나 마우스를 올려 세부 정보를 확인할 수 있다. - 필터를 사용해 코드베이스의 특정 계층이나 영역만 탐색할 수 있다. - 정적인 문서나 설명을 읽는 대신 아키텍처를 직접 탐색하면서 시스템 구조를 이해할 수 있다. ## 세션과 Git worktree 관리 - GitHub Copilot 앱의 활성 세션과 연결된 worktree를 한 화면에 표시한다. - 현재 사용 중인 worktree와 오래되었거나 고립된(orphaned) worktree를 구분한다. - 필요하지 않은 stale worktree를 버튼 클릭 몇 번으로 정리할 수 있다. - 여러 에이전트 세션을 동시에 사용하는 개발자에게 세션 상태와 작업 공간을 관리하는 시각적 제어판 역할을 한다. ## 에이전트 프롬프트 코치 - 과거 에이전트 세션의 프롬프트를 분석해 개선점을 제안한다. - 부족한 맥락, 맞춤법 오류, 문법·구문 문제 등을 찾아낸다. - 각 프롬프트를 더 명확하고 효과적으로 작성하는 방법을 안내한다. - 반복적인 피드백을 통해 에이전트가 더 일관된 결과를 내도록 프롬프트 작성 능력을 높일 수 있다. ## 여러 도구를 연결하는 지식 탐색 - Slack, Teams, 이메일, 문서 등 여러 업무 도구를 검색한다. - 특정 파일이나 주제와 관련된 지식이 있는 사람을 찾아준다. - 해당 인물과 주제의 연결 근거가 어디에서 발견되었는지도 함께 보여준다. - 조직 내 담당자나 관련 전문가를 빠르게 파악해 추가 질문과 협업으로 이어갈 수 있다. ## 활용 시사점 캔버스 확장은 AI와의 상호작용을 프롬프트와 응답의 연속에서 시각적 탐색·편집·실행 과정으로 바꾼다. 정보를 한눈에 비교하거나 직접 조작해야 하는 작업이라면 `/create-canvas`로 원하는 화면과 동작을 구체적으로 요청해 보는 것이 효과적이다.

github

Git worktree란 무엇이며, 왜 사용해야 할까요? (새 탭에서 열림)

Git worktree는 하나의 저장소에서 여러 작업 디렉터리를 동시에 운영하게 해 주는 기능으로, 브랜치 전환과 `git stash` 없이 여러 작업을 병렬로 진행할 수 있게 한다. 특히 AI 에이전트와 개발 세션을 동시에 실행하는 환경에서 각 작업의 맥락을 보존하고 전환 비용을 줄여 주기 때문에 최근 주목받고 있다. 다만 의존성 저장 공간, 디렉터리 정리, 동일 브랜치 중복 체크아웃 등의 관리 부담은 남아 있다. ## 브랜치 전환과 `git stash`의 부담 - 기존 방식에서는 긴급한 버그를 처리하기 위해 현재 작업을 먼저 임시 저장해야 한다. ```bash git stash "wip feature login" ``` - 이후 `main` 브랜치로 이동하고 최신 변경 사항을 받은 뒤, 별도의 핫픽스 브랜치를 생성한다. ```bash git checkout main git pull origin main git checkout -b hotfix-bug ``` - 수정·커밋·푸시·병합이 끝나면 다시 원래 브랜치로 돌아가 `stash pop`을 실행한다. - 이 과정에서 다음과 같은 비용이 발생한다. - 작업 파일과 에디터 상태를 반복해서 다시 로드해야 함 - 변경된 의존성에 따라 `node_modules` 등을 재설치할 수 있음 - 복잡한 stash 충돌이 발생할 수 있음 - 현재 작업의 맥락을 잃기 쉬움 - 일부 개발자는 이를 피하기 위해 같은 저장소를 여러 번 clone하기도 하지만, 저장 공간과 관리 부담이 커진다. ## Worktree를 이용한 병렬 작업 - `git worktree add`를 사용하면 기존 작업 디렉터리를 그대로 둔 채 별도의 디렉터리에서 다른 브랜치를 체크아웃할 수 있다. ```bash git worktree add ../hotfix-workspace -b hotfix-bug main ``` - 이 명령은 다음 작업을 한 번에 수행한다. - 기존 프로젝트 옆에 `hotfix-workspace` 디렉터리 생성 - `main`을 기반으로 `hotfix-bug` 브랜치 생성 - 새 디렉터리에서 해당 브랜치 체크아웃 - 원래 에디터 창과 feature 브랜치의 파일 상태는 그대로 유지된다. - 새 디렉터리에서 독립적으로 수정하고 커밋·푸시할 수 있다. ```bash cd ../hotfix-workspace git add . git commit -m "fix broken submit button" git push origin hotfix-bug ``` - 작업이 끝나면 임시 worktree를 제거한다. ```bash cd ../main-project git worktree remove ../hotfix-workspace ``` - 따라서 stash 충돌 없이 여러 작업을 동시에 진행하고, 각 작업의 에디터와 파일 맥락을 보존할 수 있다. - VS Code 등 일부 개발 도구는 worktree를 직접 지원한다. ## Worktree가 최근 주목받는 이유 - Git worktree 자체는 2015년부터 존재했지만, 오랫동안 일반 개발자에게 널리 알려지지는 않았다. - 과거에는 대부분 다음과 같은 단순한 흐름을 사용했다. - feature 브랜치 생성 - 작업 - Pull Request 생성 - 병합 - 다음 작업 시작 - Git GUI가 worktree를 제대로 지원하지 않거나 부가 기능처럼 취급한 점도 확산을 막았다. - 최근에는 AI 도구와 에이전트가 여러 개발 세션을 동시에 실행하면서 병렬 작업이 크게 증가했다. - 코드 작성뿐 아니라 코드 리뷰와 자동화 작업도 병렬로 진행되면서, 세션마다 독립적인 작업 공간을 제공하는 worktree가 적합해졌다. - GitHub Copilot 앱을 비롯한 최신 개발 도구에서는 worktree가 기본 실행 방식으로 사용되기도 한다. ## Worktree 사용 시 주의점 - **의존성 저장 공간 증가** - 각 worktree가 프로젝트 의존성을 별도로 설치하면 `node_modules`나 Python 패키지가 반복 저장된다. - 여러 worktree를 동시에 사용하면 디스크 공간이 빠르게 줄어들 수 있다. - **디렉터리 정리 필요** - 작업이 끝난 worktree를 직접 삭제하지 않으면 부모 디렉터리에 임시 폴더가 계속 쌓인다. - 일부 앱은 이를 자동으로 처리하지만, 터미널 사용 시 직접 관리해야 한다. - **`.gitignore` 설정** - 저장소 내부에 worktree를 만들 경우 해당 폴더가 실수로 추적되지 않도록 `.gitignore`에 추가해야 한다. - 저장소 외부에 worktree를 생성하면 이 문제를 줄일 수 있다. - **동일 브랜치 중복 체크아웃 제한** - Git은 데이터 손상을 막기 위해 같은 브랜치를 여러 worktree에서 동시에 체크아웃하지 못하게 한다. ## GitHub Copilot 앱에서의 사용 - 새 세션을 만들 때 실행 위치를 선택할 수 있으며, 기본값으로 새 worktree를 사용할 수 있다. - 세션을 시작하면 앱에서 다음 정보를 확인할 수 있다. - 생성된 worktree 이름 - worktree의 경로 - 연결된 프로젝트 - 해당 worktree에서 발생한 변경 사항 - 사용자가 직접 Git 명령을 관리하지 않아도 병렬 세션을 쉽게 만들고 정리할 수 있다는 점이 장점이다. ## 상황에 따른 선택 - 작업을 자주 병렬로 진행하거나 AI 에이전트를 여러 개 실행한다면 worktree가 특히 유용하다. - 단일 작업을 순차적으로 처리하고 기존 브랜치·stash 방식이 익숙하다면 반드시 전환할 필요는 없다. - 두 방식을 함께 사용하면서 작업 유형에 따라 선택하는 것도 가능하다. - 병렬 작업이 많은 팀이나 개발자는 worktree를 도입하되, 의존성 공유와 임시 디렉터리 정리 전략을 함께 마련하는 것이 좋다.