runlot
코드

저장소

Runlot이 직접 굴리는 Git 저장소입니다. clone 하고 push 하는 곳이 우리 도메인이고, 접근 권한은 조직 역할이 정합니다.

Runlot에는 Git 저장소가 있습니다. GitHub 연동이 아니라, git clonegit push우리 주소로 되는 저장소입니다.

cd my-project              # runlot.json 이 있는 프로젝트 디렉터리
runlot repo create app
# my-org/my-project/app 을(를) 만들었습니다
# origin 을 등록했습니다: [email protected]:my-org/my-project/app.git
git push -u origin main

저장소는 프로젝트의 것입니다. 주소가 <조직>/<프로젝트>/<저장소> 세 마디인 이유이고, 한 프로젝트에 저장소를 여럿 둘 수 있습니다 — 앱과 API, 프론트와 워커처럼요. 이름은 프로젝트 안에서만 겹치지 않으면 됩니다. 누가 읽고 쓸 수 있는지는 조직 역할이 정합니다.

시작하기

1. 공개키를 등록합니다

runlot key add
# ~/.ssh/id_ed25519.pub 를 등록했습니다 (ssh-ed25519, SHA256:…)

인자 없이 부르면 ~/.ssh에서 기본 키를 찾습니다. 다른 키를 쓰려면 경로를 직접 주세요: runlot key add ~/.ssh/work.pub.

키 하나가 곧 신원이므로 같은 공개키를 두 사람이 등록할 수 없습니다. 이미 등록된 키를 다시 올리면 거절합니다.

처음 붙을 때 지문을 확인해 주세요

ssh가 보여 주는 호스트 지문이 아래와 다르면 붙지 마세요.

ed25519  SHA256:C7pTddRdCM1JuEbdi+73oBN+sNAZhb1H5t3CJSlyPj4
rsa      SHA256:+6PMLfTVpcjjLOVSWgiRI0nVQ5f9bVl0nuzcJ0EfTfE

2. 저장소를 만듭니다

runlot repo create app          # 기본은 비공개입니다
runlot repo create app --public # 누구나 clone 할 수 있습니다

runlot deploy·runlot pg 와 같은 자리에 만듭니다 — 현재 디렉터리의 runlot.json 이 가리키는 프로젝트입니다. 만든 자리의 디렉터리가 Git 저장소라면 origin까지 등록합니다. 이미 origin이 있으면 등록하지 않고 명령만 알려 줍니다.

3. 밉니다

git push -u origin main

HTTPS로 붙기

SSH 대신 HTTPS로 붙을 수도 있습니다. 토큰을 하나 발급하고, git이 비밀번호를 물어보면 그 자리에 넣으세요 (사용자명은 아무거나 괜찮습니다).

runlot token create laptop            # 읽기·쓰기
runlot token create ci --read-only    # clone 전용
git clone https://git.runlot.io/my-org/my-project/app.git

HTTPS와 SSH는 git.runlot.io 로 주소가 같고, SSH는 보통의 22번 포트입니다 — ~/.ssh/config 에 따로 적을 것이 없습니다.

토큰 값은 발급할 때 한 번만 보여 줍니다. 다시 볼 수 없으니 그때 보관해 주세요. 잃어버렸으면 runlot token revoke <id> 로 폐기하고 새로 만드세요.

읽기 전용 토큰으로 push하면 이유와 함께 거절합니다 — 저장소가 없는 것처럼 보이지 않습니다.

명령

명령하는 일
runlot repo create <이름> [디렉터리]저장소를 만들고 origin을 등록합니다 (--public)
runlot repo list저장소 목록 (--json)
runlot repo rename <옛> <새>이름을 바꿉니다 (admin)
runlot repo visibility <이름> <public|private>공개 여부를 바꿉니다 (admin)
runlot repo delete <이름>저장소를 지웁니다 (admin)
runlot repo history <이름>누가 어느 브랜치를 어떻게 옮겼는지
runlot key add [경로] / runlot key list / runlot key rm <id>SSH 공개키
runlot token create <이름> / runlot token list / runlot token revoke <id>HTTPS용 토큰

runlot repo 명령은 프로젝트를 대상으로 합니다. 프로젝트 디렉터리 밖에서 쓸 때는 --org--project를 함께 주세요. keytoken은 사용자의 것이라 어디서든 됩니다.

누가 무엇을 할 수 있나

비공개 저장소공개 저장소
조직 admin읽기·쓰기·설정읽기·쓰기·설정
조직 member읽기·쓰기읽기·쓰기
조직 viewer읽기읽기
다른 조직 사용자읽기
로그인하지 않은 사람읽기

권한 변경은 최대 10초 안에 반영됩니다. 공개키를 지우거나 토큰을 폐기하는 것은 즉시 반영됩니다 — 지금 당장 막고 싶어서 쓰는 기능이기 때문입니다.

이력

push는 한 줄씩 남습니다. force-push로 잃은 커밋을 되찾을 수 있는 단서가 여기 있습니다.

runlot repo history app
# 2026-09-09T07:38:30Z	생성	refs/heads/main	ae4bb959

clonefetch는 남기지 않습니다.

지금 되는 것과 안 되는 것

되는 것: clone, fetch, push, 브랜치, 태그, force-push, 브랜치 삭제.

아직 없는 것

  • 얕은 clone(--depth 1)을 지원하지 않습니다. CI에서 흔히 쓰는 관용구라 불편할 수 있습니다.
  • Pull Request, 이슈, 코드 리뷰, CI가 없습니다. 저장소는 저장소입니다.
  • push가 배포를 부르지 않습니다. 배포는 runlot deploy입니다.
  • 백업은 같은 기계에 둡니다. 실수로 지운 저장소는 되돌릴 수 있지만, 기계가 통째로 사라지는 경우까지는 아직 대비하지 못합니다. Git은 원래 개발자 기계마다 완전한 사본이 있다는 점이 지금의 안전장치입니다.

웹에서 보기

대시보드에서 프로젝트를 열면 저장소 탭이 있습니다. 저장소를 만들고, 브랜치와 태그를 고르고, 파일 트리와 파일 내용, 커밋 목록, ref 이력(누가 어느 브랜치를 어떻게 옮겼는지)을 볼 수 있습니다. 관리자는 설정 탭에서 이름·기본 브랜치·공개 범위를 바꾸고 저장소를 지울 수 있습니다. Clone 버튼이 HTTPS·SSH 주소를 줍니다.

화면에는 상한이 그대로 보입니다 — 1 MiB가 넘는 파일과 이진 파일은 미리보기가 없고, 디렉터리 항목은 1,000개까지 보여 줍니다. 그 경우 clone해서 확인해 주세요.

상한

항목넘으면
저장소 크기1GiBpush를 거절합니다
push 한 번의 크기500MiBpush를 거절합니다
파일 하나100MiBpush를 거절합니다
기본 브랜치 삭제거절합니다 (되돌릴 방법이 없습니다)

상한에 걸리면 git push가 이유를 그대로 보여 줍니다.

자주 겪는 것

Permission denied (publickey)runlot key list로 그 키가 등록돼 있는지 보세요. 여러 키를 쓴다면 ~/.ssh/config에 어느 키를 쓸지 적어 주세요.

Host git.runlot.io
  IdentityFile ~/.ssh/id_ed25519
  IdentitiesOnly yes

non-fast-forward (fetch first) — 그 사이에 누가 밀었습니다. git pull --rebase 뒤에 다시 미세요. 정말 덮어써야 한다면 git push --force입니다.

예전 두 마디 주소로 push·clone 하면 — 주소가 세 마디가 됐습니다 (<조직>/<프로젝트>/<저장소>). SSH는 무엇을 고쳐야 하는지 알려 주고, HTTPS는 저장소를 못 찾습니다. remote 를 다시 지정해 주세요.

runlot repo list                # 지금 주소를 확인합니다
git remote set-url origin [email protected]:my-org/my-project/my-app.git

저장소 이름을 바꿨습니다 — 등록해 둔 remote 주소도 함께 고쳐 주세요.

git remote set-url origin [email protected]:my-org/my-project/new-name.git

이 페이지의 목차