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
토큰
- 포털 로그인 → 호스팅
- API 토큰에서 발급 (DB API와 동일 토큰)
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 |
reset | soft/mixed/hard | mode, 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 |
config | user.name / email | op, 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에 넣지 말고, 원격 쪽 배포키 정책을 확인하세요.
권장 워크플로 (수업)
- SFTP로
public_html/01 등 결과물 업로드
status → add → commit
- 필요 시 브랜치로 실험 후
merge
- 나중에 직접 만든 Git 관리 페이지에서 같은 action 호출
SFTP와 함께 쓰기
- SFTP 경로:
public_html/… (웹), git/ (저장소 메타 — 직접 수정 비권장)
git/ 폴더를 지우면 API ensure 로 다시 만들 수 있습니다.
- 웹에 올리면 안 되는 비밀은
public_html 밖에 두지 마세요. (chroot 안 형제는 git 뿐)
한도·보안
- 본인 계정 저장소만 접근합니다.
- 경로에
.. · 절대경로 금지
- 허용된 git 서브커맨드만 실행 (임의 셸 명령 불가)
config 은 user.name / user.email 만
- 명령 타임아웃 약 60~120초, 출력 길이 제한
write_worktree 본문 최대 512KB
.env · config.php (비밀 설정 파일)
DB 비밀번호·API 키 등이 들어가는 파일입니다. 기능 오류가 아니라 보안 습관 문제입니다. 각 참가자가 본인 사이트에서 관리합니다.