GitSalt Docs

API & 개발자 가이드

Git Data API

여러 파일을 한 번의 커밋으로 저장소에 반영하는 low-level API입니다.
모든 엔드포인트는 Authorization: token <TOKEN> 헤더가 필요합니다.

1. Blob 생성

파일 내용을 git 오브젝트로 저장하고 SHA를 반환합니다.

POST /api/v1/repos/{owner}/{repo}/git/blobs

요청

{
  "content": "base64로_인코딩된_내용",
  "encoding": "base64"   // 또는 "utf-8"
}

응답

{
  "sha": "3a0f86fb8...",
  "url": "https://gitsalt.com/api/v1/repos/user/repo/git/blobs/3a0f86fb8...",
  "size": 1024
}

2. Tree 생성

여러 blob을 묶어 디렉터리 구조(tree)를 만듭니다. base_tree를 지정하면 기존 트리 위에 덮어씁니다.

POST /api/v1/repos/{owner}/{repo}/git/trees
{
  "base_tree": "현재_tree_SHA",
  "tree": [
    {
      "path": "src/index.ts",
      "mode": "100644",
      "type": "blob",
      "sha":  "3a0f86fb8..."
    }
  ]
}

3. Commit 생성

tree SHA와 부모 커밋으로 새 커밋 오브젝트를 만듭니다.

POST /api/v1/repos/{owner}/{repo}/git/commits
{
  "message": "커밋 메시지",
  "tree":    "tree_SHA",
  "parents": ["부모_commit_SHA"],
  "author": {
    "name":  "홍길동",
    "email": "hong@example.com",
    "date":  "2026-08-19T10:00:00Z"
  }
}

4. Ref(브랜치) 업데이트

브랜치를 새 커밋 SHA로 이동합니다. git push와 동일한 효과입니다.

PATCH /api/v1/repos/{owner}/{repo}/git/refs/heads/{branch}
{
  "sha":   "새_commit_SHA",
  "force": false
}

전체 흐름 예시

// 1) 현재 브랜치의 최신 commit SHA, tree SHA 조회
GET /api/v1/repos/{owner}/{repo}/branches/{branch}

// 2) 변경된 파일마다 blob 생성
POST /api/v1/repos/{owner}/{repo}/git/blobs  →  blob_sha[]

// 3) 기존 tree에 blob 반영하여 새 tree 생성
POST /api/v1/repos/{owner}/{repo}/git/trees  →  tree_sha

// 4) 새 commit 생성
POST /api/v1/repos/{owner}/{repo}/git/commits  →  commit_sha

// 5) 브랜치를 새 commit으로 이동
PATCH /api/v1/repos/{owner}/{repo}/git/refs/heads/{branch}