콘텐츠로 이동

워크스페이스에 저장소 추가

이 가이드에서는 Git 체크아웃을 워크스페이스에 등록하고, 다시 인덱싱한 다음, 제거하는 방법을 설명합니다.

저장소는 워크스페이스 범위입니다. 전역 레지스트리도, 연결 단계도 없습니다. 저장소를 추가하는 일과 그것을 워크스페이스에 넣는 일은 같은 동작입니다. 같은 체크아웃을 두 워크스페이스에 등록하면 서로 다른 두 개의 id를 가진 두 개의 독립된 행이 됩니다. 워크스페이스를 넘어서는 순간 저장소의 정체성은 파일 시스템 경로이며, id는 결코 아닙니다.

폴더는 다음 세 가지를 모두 충족할 때만 등록할 수 있습니다:

  1. git 워크트리 안에 있어야 합니다.
  2. 그 워크트리에 origin 원격이 있어야 합니다.
  3. origin 원격이 지원되는 forge를 가리켜야 합니다: github.com, gitlab.com, bitbucket.org.

그 밖의 경우는 등록 시점에 명시적인 메시지와 함께 거부됩니다: “Folder is not inside a git work tree.”, “No origin remote configured for this repository.”, “The origin remote is not hosted on a supported forge (github.com, gitlab.com, bitbucket.org).”. 로컬 전용 모드는 없습니다.

forge는 원격에서 읽어 저장소에 저장되며, 사용자가 직접 고르는 값이 아닙니다. 워크스페이스 하나가 세 forge의 저장소를 동시에 담을 수 있고, 각 저장소와는 자체 자격 증명을 가진 자체 API로 통신합니다. GitLab의 중첩 네임스페이스는 그대로 유지되므로, gitlab.com/group/subgroup/project는 소유자 group/subgroup, 이름 project로 등록됩니다.

폴더는 cc_server를 호스팅하는 머신에 있어야 하며, 그 서버의 --repo-roots 디렉터리 중 하나 안에 있어야 합니다. 이 허용 목록의 기본값은 서버 사용자의 홈 디렉터리이며, 루트보다 위로 탐색하는 것은 거부됩니다.

  1. 설정 → 워크스페이스 → 리포지토리(/workspaces/<id>/settings/workspace/repositories)를 엽니다.
  2. 리포지토리 추가를 클릭합니다.

이 대화 상자는 사용자의 파일 시스템이 아니라 서버의 파일 시스템을 탐색하는 브라우저입니다. 데스크톱, 웹, 휴대폰에서 흐름이 같습니다. 네이티브 폴더 선택기를 쓰면 엉뚱한 머신의 폴더를 고르게 되기 때문입니다.

  1. 서버에 구성된 루트 안에서 탐색합니다. git 체크아웃인 폴더에는 표시가 붙습니다.
  2. 원하는 만큼 선택합니다. 탐색하는 동안 선택이 유지되므로, 여러 폴더에서 체크아웃을 모을 수 있습니다.
  3. 한 번에 일괄 등록합니다.

선택 하나가 실패해도 나머지 일괄 처리분이 버려지지 않습니다. 생성된 id와 함께, 거부된 경로마다 개별 오류가 표시됩니다. 이 워크스페이스에 이미 있는 경로를 다시 등록하면 중복을 만들지 않고 기존 저장소를 반환합니다.

등록된 각 저장소는 목록에 owner/name, forge를 나타내는 배지, 서버상의 경로와 함께 표시됩니다. GitHub 저장소는 소유자의 아바타도 보여 주지만, 다른 forge는 소유자 아바타 URL을 유추할 수 없어 이니셜로 대체합니다.

forge 배지는 여러 forge가 섞인 워크스페이스에서 중요합니다. 서로 다른 forge의 두 저장소가 모두 acme/web이라고 불릴 수 있는데, 리뷰로 무엇을 할 수 있는지, 링크가 어디로 향하는지가 서로 다르게 동작합니다.

등록은 이 워크스페이스 범위의 RepoAdded 이벤트를 발생시키고, 이것이 해당 체크아웃의 index_code 파이프라인을 시작합니다. 이 파이프라인이 코드 그래프를 채우므로, 검색과 영향 분석이 답할 수 있는 대상이 생깁니다.

언어별 문법이 함께 제공되는 파일만 인덱싱됩니다(Dart, JavaScript, TypeScript, TSX, PHP, Python, Rust, Zig, C, C++, Go, Java, Ruby, C#, Swift, Kotlin, R, Assembly, MATLAB, Ada). 코드 그래프로 코드 검색을 참고하세요.

각 행에는 코드 인덱싱 버튼이 있습니다. 클릭하면 그 체크아웃의 인덱서가 다시 실행됩니다. 실행되는 동안 버튼은 전체 파일 수 대비 완료한 파일 수를 보여 주는 진행 표시로 바뀌고 취소 컨트롤이 함께 나타납니다. 실행이 끝나면 심볼 개수와 함께 체크 표시로 바뀌고, 실행이 실패했다면 경고가 표시됩니다.

행의 핸들을 끌어 옮깁니다. 설정한 순서가 앱의 모든 저장소 목록이 읽어 들이는 순서가 됩니다.

행의 링크 아이콘을 누르면 저장소의 GitHub 소유자와 리포지토리 이름을 편집하는 화면이 열립니다. 원격의 이름이 바뀌었거나 다른 곳으로 이전되었을 때 유용합니다.

  1. 설정 → 워크스페이스 → 리포지토리를 엽니다.
  2. 행의 휴지통 아이콘을 클릭합니다.
  3. “워크스페이스에서 리포지토리를 제거할까요?“를 확인합니다.

대화 상자는 수행할 작업을 그대로 알려 줍니다: “name이(가) 이 워크스페이스에서 제거됩니다. 디스크의 로컬 파일은 변경되지 않습니다.”

제거하면 이 워크스페이스에서 저장소 행이 삭제되고, 그 저장소의 코드 그래프 행 — 심볼, 엣지, 파일, 인덱스 체크포인트 — 이 연쇄적으로 정리됩니다. 여기에 더해 그 저장소에 대한 멤버별 저장소 부여, 스페이스-저장소 연결, 격리된 체크아웃 기록도 함께 삭제됩니다. 다른 워크스페이스에 등록된 같은 체크아웃은 독립된 행이므로 영향을 받지 않습니다. 그 기록들이 가리키던 디스크상의 워크트리는 이 삭제로 함께 정리되지 않습니다.