Developer · Hosting · Git

Git API 사용법

계정마다 public_html 형제 디렉터리 git 에 개인 저장소가 있습니다. 호스팅 탭 API 토큰(Bearer)으로 커밋·브랜치·원격 등 Git 관리를 HTTPS로 수행합니다. 이후 직접 Git 관리 페이지를 만들 때 이 API를 사용하면 됩니다.

저장소 위치

/home/edu/{아이디}/
  public_html/     ← 웹 루트 (Git work tree)
  git/             ← Git 디렉터리 (public_html 형제, SFTP에서 /git)
  • SFTP chroot 안에서는 public_html, git 이 나란히 보입니다.
  • 파일 수정은 SFTP 또는 write_worktree API, 버전 관리는 Git API로 합니다.
  • 기본 브랜치: main

토큰

  1. 포털 로그인 → 호스팅
  2. API 토큰에서 발급 (DB API와 동일 토큰)
  3. zyo_ 로 시작하는 값은 한 번만 표시됩니다.

토큰이 있으면 본인 사이트 파일·Git 이력·DB에 접근할 수 있습니다. 공개 저장소에 올리지 마세요.

엔드포인트

URL
https://zyo.kr/api/git_api.php
Method
POST · preflight OPTIONS
Header
Authorization: Bearer zyo_…
Content-Type: application/json
CORS
브라우저에서 https://{아이디}.zyo.kr 대시보드 호출 허용 (포털·학생 서브도메인만)

요청 형식

{
  "action": "status",
  "...": "action별 추가 필드"
}

전체 action 목록: {"action":"actions"}

action 목록

action설명주요 필드
ensure / init저장소 생성·점검
info경로·브랜치·HEAD·원격 요약
status작업 트리 상태porcelain
log커밋 이력limit, skip, path
show커밋/파일 내용rev, path
diff차이staged, rev, path
branches브랜치 목록all
branch생성/삭제/이름변경op, name, start_point
checkout브랜치·커밋 이동ref, create
add스테이징all 또는 paths[]
unstage스테이징 해제all 또는 paths[]
commit커밋message, allow_empty
rm삭제paths[], cached
restore되돌리기paths[], source, staged
resetsoft/mixed/hardmode, ref
stash임시 저장op: list|push|pop|apply|drop
tag / tags태그op, name, message
merge병합ref, no_ff
remote원격 관리op, name, url
fetch / pull / push원격 동기화remote, branch
configuser.name / emailop, key, value
ls_files / ls_tree파일 목록rev, path
cat_file객체/파일 읽기spec 예 HEAD:index.html
read_worktree작업 트리 파일 읽기path
write_worktree작업 트리 파일 쓰기path, content, add
clean미추적 정리force (기본 dry-run)
gc가비지 컬렉션
raw허용 서브커맨드 직접 전달argv[]
actions이 목록

예제

상태 확인

curl -sS -X POST https://zyo.kr/api/git_api.php \
  -H "Authorization: Bearer zyo_YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"action":"info"}'

SFTP로 올린 파일 커밋

# 1) 변경 확인
curl ... -d '{"action":"status","porcelain":true}'

# 2) 전부 스테이징
curl ... -d '{"action":"add","all":true}'

# 3) 커밋
curl ... -d '{"action":"commit","message":"01 입문 과제 제출"}'

API로 파일 쓰고 커밋

curl ... -d '{
  "action":"write_worktree",
  "path":"hello.txt",
  "content":"hello zyo\n",
  "add": true
}'
curl ... -d '{"action":"commit","message":"add hello.txt"}'

브랜치

curl ... -d '{"action":"branch","op":"create","name":"feature/demo"}'
curl ... -d '{"action":"checkout","ref":"feature/demo"}'

GitHub 등 원격 push (선택)

curl ... -d '{"action":"remote","op":"add","name":"origin","url":"https://github.com/YOU/repo.git"}'
curl ... -d '{"action":"push","remote":"origin","branch":"main","set_upstream":true}'

HTTPS 원격은 자격 증명이 필요할 수 있습니다. 토큰·비밀번호를 API body에 넣지 말고, 원격 쪽 배포키 정책을 확인하세요.

권장 워크플로 (수업)

  1. SFTP로 public_html/01 등 결과물 업로드
  2. statusaddcommit
  3. 필요 시 브랜치로 실험 후 merge
  4. 나중에 직접 만든 Git 관리 페이지에서 같은 action 호출

SFTP와 함께 쓰기

  • SFTP 경로: public_html/… (웹), git/ (저장소 메타 — 직접 수정 비권장)
  • git/ 폴더를 지우면 API ensure 로 다시 만들 수 있습니다.
  • 웹에 올리면 안 되는 비밀은 public_html 밖에 두지 마세요. (chroot 안 형제는 git 뿐)

한도·보안

  • 본인 계정 저장소만 접근합니다.
  • 경로에 .. · 절대경로 금지
  • 허용된 git 서브커맨드만 실행 (임의 셸 명령 불가)
  • configuser.name / user.email
  • 명령 타임아웃 약 60~120초, 출력 길이 제한
  • write_worktree 본문 최대 512KB

.env · config.php (비밀 설정 파일)

DB 비밀번호·API 키 등이 들어가는 파일입니다. 기능 오류가 아니라 보안 습관 문제입니다. 각 참가자가 본인 사이트에서 관리합니다.

  • Git에 올리지 마세요. 커밋·push 하면 비밀번호가 이력에 남습니다. 프로젝트 루트(또는 public_html)에 .gitignore 를 두고 아래를 넣으세요.
    .env
    .env.*
    **/config.php
    **/.db_pass
    이미 커밋했다면 비밀번호를 즉시 변경하고, 이후부터 ignore 하세요. (이력에서 완전히 지우는 것은 별도 작업이 필요합니다.)
  • 파일 권한 권장: SFTP로 해당 파일 선택 후 권한을 640 (소유자 읽기·쓰기, 그룹 읽기)으로 두세요. 644 는 서버 내 다른 프로세스에도 내용이 보일 수 있습니다.
  • API 사용 시: add / commit 전에 status.env 가 스테이징되지 않았는지 확인하세요. add: all 은 비밀 파일까지 포함하기 쉽습니다.
  • 원격 저장소(GitHub 등): public 저장소에 .env 가 올라가면 즉시 유출로 간주하고 키·DB 비번을 교체하세요.