저장소
runlot이 직접 호스팅하는 Git 저장소입니다. 저희 도메인으로 clone하고 push하며, 접근 권한은 조직 역할을 따릅니다.
runlot은 Git 저장소를 호스팅합니다. GitHub 연동이 아니며, git clone과 git push는 저희 주소와 통신합니다.
cd my-project # the project directory, where runlot.json lives
runlot repo create app
# my-org/my-project/app created
# origin registered: [email protected]:my-org/my-project/app.git
git push -u origin main저장소는 프로젝트에 속합니다. 그래서 주소가 <org>/<project>/<repo> 세 부분으로 이루어지고, 하나의 프로젝트가 여러 저장소를 가질 수 있는 것입니다 — 앱과 API, 프런트엔드와 워커처럼요. 이름은 프로젝트 안에서만 유일하면 됩니다. 읽기·쓰기 권한은 조직 역할을 따릅니다.
시작하기
1. 공개 키를 등록하세요
runlot key add
# registered ~/.ssh/id_ed25519.pub (ssh-ed25519, SHA256:…)인자가 없으면 ~/.ssh 아래에서 기본 키를 찾습니다. 다른 키를 쓰려면 경로를 전달하세요: runlot key add ~/.ssh/work.pub.
여기서 키는 곧 신원이므로, 두 사람이 같은 공개 키를 등록할 수 없습니다. 이미 등록된 키를 다시 등록하면 거부됩니다.
처음 연결할 때 지문을 확인하세요
ssh가 보여주는 호스트 지문이 이와 다르면 계속 진행하지 마세요.
ed25519 SHA256:C7pTddRdCM1JuEbdi+73oBN+sNAZhb1H5t3CJSlyPj4
rsa SHA256:+6PMLfTVpcjjLOVSWgiRI0nVQ5f9bVl0nuzcJ0EfTfE2. 저장소를 생성하세요
runlot repo create app # private by default
runlot repo create app --public # anyone can clonerunlot deploy와 runlot pg가 작동하는 곳과 같은 곳, 즉 현재 디렉터리의 runlot.json이 지정하는 프로젝트에 생성됩니다. 해당 디렉터리가 Git 저장소라면 origin이 자동으로 등록됩니다. origin이 이미 존재하면 그대로 두고, 대신 새 저장소로 origin을 가리키게 하는 명령을 출력합니다.
3. Push하세요
git push -u origin mainHTTPS로
SSH 대신 HTTPS를 사용할 수 있습니다. 토큰을 생성한 뒤, git이 비밀번호를 물으면 붙여넣으세요 (사용자 이름은 아무거나 괜찮습니다).
runlot token create laptop # read and write
runlot token create ci --read-only # clone only
git clone https://git.runlot.io/my-org/my-project/app.gitHTTPS와 SSH는 동일한 주소 git.runlot.io를 사용하며, SSH는 일반 포트 22를 사용하므로 ~/.ssh/config에 추가할 것이 없습니다.
토큰 값은 생성할 때 한 번만 표시됩니다. 그때 보관해 두세요 — 나중에 다시 볼 수 없습니다. 분실했다면 runlot token revoke <id>로 폐기하고 새로 만드세요.
읽기 전용 토큰으로 push하면 설명과 함께 거부되며, 저장소가 없는 것처럼 위장되지 않습니다.
명령어
| 명령어 | 하는 일 |
|---|---|
runlot repo create <name> [dir] | 저장소를 생성하고 origin을 등록합니다 (--public) |
runlot repo list | 저장소 목록을 표시합니다 (--json) |
runlot repo rename <old> <new> | 이름을 변경합니다 (admin) |
runlot repo visibility <name> <public|private> | 공개 범위를 변경합니다 (admin) |
runlot repo delete <name> | 삭제합니다 (admin) |
runlot repo history <name> | 누가 어떤 브랜치를 어떻게 옮겼는지 |
runlot key add [path] / runlot key list / runlot key rm <id> | SSH 공개 키 |
runlot token create <name> / runlot token list / runlot token revoke <id> | HTTPS용 토큰 |
runlot repo는 프로젝트를 대상으로 합니다. 프로젝트 디렉터리 밖에서는 --org와 --project를 모두 전달하세요. key와 token은 프로젝트가 아니라 사용자 개인의 것이며 어디서나 작동합니다.
누가 무엇을 할 수 있는지
| 비공개 저장소 | 공개 저장소 | |
|---|---|---|
| 조직 관리자 | 읽기, 쓰기, 설정 | 읽기, 쓰기, 설정 |
| 조직 구성원 | 읽기, 쓰기 | 읽기, 쓰기 |
| 조직 뷰어 | 읽기 | 읽기 |
| 다른 조직의 사용자 | — | 읽기 |
| 로그인하지 않음 | — | 읽기 |
권한 변경은 10초 이내에 적용됩니다. 공개 키 삭제나 토큰 폐기는 즉시 적용됩니다 — 그 버튼들이 존재하는 이유가 바로 그것입니다.
히스토리
모든 push는 기록을 남깁니다. force-push로 사라진 커밋을 이렇게 찾을 수 있습니다.
runlot repo history app
# 2026-09-09T07:38:30Z created refs/heads/main ae4bb959clone과 fetch는 기록되지 않습니다.
되는 것과 아직 안 되는 것
되는 것: clone, fetch, push, 브랜치, 태그, force-push, 브랜치 삭제.
아직 안 되는 것
- 얕은 clone(
--depth 1)은 지원되지 않습니다. 이는 흔한 CI 관용구라서, 여기서 걸림돌이 될 수 있습니다. - pull request, 이슈, 코드 리뷰, CI는 제공하지 않습니다. Git 호스팅만 제공합니다.
- push만으로는 배포되지 않습니다. 배포는
runlot deploy이거나, 관리자가 브랜치에 켜 둔 푸시하면 배포입니다. - 백업은 같은 머신에 저장됩니다. 실수로 삭제한 저장소는 복구할 수 있지만, 머신 자체가 사라지면 백업도 함께 사라집니다. 오늘 여러분을 지켜주는 것은 Git 자체입니다 — 모든 개발자 머신이 전체 사본을 갖고 있기 때문입니다.
웹에서 둘러보기
대시보드에서 프로젝트를 열고 Repositories 탭을 사용하세요. 저장소를 생성하고, 브랜치와 태그를 전환하고, 파일 트리, 파일 내용, 커밋 목록, ref 히스토리 — 누가 어떤 브랜치를 어떻게 옮겼는지 — 를 확인할 수 있습니다. 관리자는 Settings 탭에서 이름 변경, 기본 브랜치나 공개 범위 변경, 저장소 삭제를 할 수 있습니다. Clone 버튼은 HTTPS와 SSH 주소를 제공합니다.
웹 화면은 제한 사항을 미리 안내합니다. 1 MiB를 초과하는 파일과 바이너리 파일은 미리보기가 제공되지 않으며, 디렉터리는 처음 1,000개 항목까지만 표시됩니다. 이를 넘어서 확인하려면 저장소를 clone하세요.
제한 사항
| 항목 | 값 | 초과 시 |
|---|---|---|
| 저장소 크기 | 1 GiB | push가 거부됩니다 |
| 한 번의 push | 500 MiB | push가 거부됩니다 |
| 파일 하나 | 100 MiB | push가 거부됩니다 |
| 기본 브랜치 삭제 | — | 거부됨(되돌릴 수 없습니다) |
한도에 도달하면 git push가 이유를 출력합니다.
일반적인 문제
Permission denied (publickey) — runlot key list로 키가 등록되어 있는지 확인하세요. 여러 키를 사용 중이라면 사용할 키를 지정하세요:
Host git.runlot.io
IdentityFile ~/.ssh/id_ed25519
IdentitiesOnly yesnon-fast-forward (fetch first) — 그사이 다른 사람이 푸시했습니다. git pull --rebase를 실행한 뒤 다시 푸시하거나, 정말로 덮어쓰려는 경우 git push --force를 사용하세요.
옛 두 부분 주소로 푸시 또는 클론 — 이제 주소는 <org>/<project>/<repo> 세 부분으로 구성됩니다. SSH는 무엇을 고쳐야 하는지 알려주며, HTTPS는 저장소가 없다고 보고합니다. 원격 주소를 새 주소로 지정하세요.
runlot repo list # shows the current address
git remote set-url origin [email protected]:my-org/my-project/my-app.git저장소 이름을 변경한 경우 — 등록해 둔 원격을 업데이트하세요:
git remote set-url origin [email protected]:my-org/my-project/new-name.git