
git-ai로 코드 작성자가 인간인지 AI인지 시각화하기
요약
git-ai는 AI 코딩 도구가 생성한 코드를 Git Notes에 기록하여 인간과 AI의 코드 작성 비율을 시각화하는 도구입니다. Cursor, Claude Code, GitHub Copilot 등 주요 AI 에이전트와 연동되어 코드의 출처를 명확히 추적할 수 있습니다.
핵심 포인트
- AI 생성 코드를 추측이 아닌 명시적 기록 방식으로 판정
- Git 확장 기능을 사용하여 프로그래밍 언어에 구애받지 않음
- git ai status 및 stats 명령어로 AI 기여도 확인 가능
- 주요 AI 도구(Claude Code, Cursor 등)와 높은 호환성 제공
git-ai는 AI에 의한 코드 생성 (Code Generation)을 후킹(Hook)하고, 대상 행을 Git의 Notes에 기록함으로써 AI 코딩 비율을 도출하는 메커니즘이다.
기존 코드에 대해 AI가 생성한 것인지 추측으로 판정하는 것이 아니라, AI가 코드를 생성했을 때 "이 차분(Diff)은 AI가 작성했다"라고 명시적으로 기록한다.
Git의 확장 기능이므로 언어에 구애받지 않고 폭넓은 프로젝트에 도입할 수 있다.
Claude Code, Codex, Cursor, GitHub Copilot, Gemini 등 메이저한 AI에는 대응하고 있다.
공식
대략적인 흐름.
- Cursor, Claude Code, GitHub Copilot 등의 AI 에이전트가 파일을 편집한다
- git-ai의
checkpoint가 호출된다 - 편집 전후의 차분(Diff)을 보고 AI 유래인지 인간 유래인지 기록한다 - 커밋(Commit) 시에 그 정보를 Authorship Log로서 정리한다 - 그 로그를 Git Notes에 저장한다 -
git ai stats나git ai blame으로 비율이나 행 단위의 유래를 확인한다
Next.js로 프로젝트를 생성하고, 여기에 git-ai를 도입해 본다.
npx create-next-app@latest learn-git-ai --yes
cd learn-git-ai
Mac에 도입하려면 다음 명령어를 실행한다.
curl -sSL https://usegitai.com/install.sh | bash
다음 명령어를 실행하여 version이 표시되면 OK.
git ai --version
본인은 경로(Path)가 설정되어 있지 않아 버전이 표시되지 않았기에, 추가로 아래를 실행했더니 버전이 표시되게 되었다.
echo 'export PATH="$HOME/.git-ai/bin:$PATH"' >> ~/.zshrc
source ~/.zshrc
또한, 확장 기능인 git-ai가 설치되어 있지 않은 경우에는 수동으로 설치한다.
src/app/page.tsx에 대해 적당히 GitHub Copilot에게 변경해 달라고 한다.
// 이 이후는 모두 github copilot이 작성한 코드
const menuItems = [
{ label: "홈", href: "#" },
...
터미널에서 아래를 실행한다.
git ai status
결과는 다음과 같다.
you ········░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ ai
0% untracked 21% 79%
52 secs ago +32 -6 Github-copilot gpt-5-mini
...
이와 같이 어느 정도의 코드를 AI가 구현했는지 알 수 있다.
커밋을 한 후에 git ai status를 실행해도 방금 전과 같은 AI 생성 비율 등을 확인할 수는 없다.
$ git ai status
No checkpoints recorded since last commit (80d6f22)
If you've made AI edits recently and don't see them here, you might need to install hooks:
...
확인하려면 다음 명령어를 사용한다.
git ai stats
결과
you ··░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ ai
0% untracked 5% 95%
이것은 다음과 같은 의미이다.
- 인간이 작성한 코드: 0%
- AI가 작성한 코드: 95%
- Git 미추적 파일: 5%
주의해야 할 점은, 이 비율이 프로젝트 전체에 대한 설명은 아니라는 것이다. git ai stats는 직근의 커밋(HEAD)만을 대상으로 한다.
여러 커밋이나 브랜치 전체를 보려면 범위 지정이 필요하다.
범위 지정 방법은 다음과 같다.
git ai stats <start>..<end>
start와 end에는 각각 커밋(Commit) ID를 기입한다.
현재 브랜치의 첫 번째 커밋부터 최신 커밋까지를 대상으로 하고 싶은 경우, 다음과 같이 작성한다.
git ai stats 4b825dc642cb6eb9a060e54bf8d69288fbee4904..HEAD
4b825dc642cb6eb9a060e54bf8d69288fbee4904는 빈 트리 (Empty Tree)를 나타낸다.
즉, 위의 명령어는 빈 상태부터 HEAD까지를 대상으로 한다는 의미이다.
현재 브랜치에서 main 브랜치 이후로 증가한 부분을 대상으로 하고 싶다면, 다음과 같이 작성할 수도 있다.
git ai stats main..HEAD
다음 명령어를 실행하면, git blame을 통해서도 AI가 생성한 코드인지 확인할 수 있다.
git ai blame <파일 경로>
src/app/page.tsx에 대해 확인하고 싶다면, 다음 명령어를 실행한다.
git ai blame src/app/page.tsx
결과
80d6f224 (username 2026-05-28 19:55:32 +0900 1) // 이 이후는 모두 GitHub Copilot이 작성한 코드
80d6f224 (username 2026-05-28 19:55:32 +0900 2)
80d6f224 (github-copilot 2026-05-28 19:55:32 +0900 3) const menuItems = [
...
생성물이나 테스트 출력물에 대해서는 대상에서 제외할 수 있다.
루트에 .git-ai-ignore 파일을 생성하고, 다음과 같이 기술한다.
.next/**
out/**
coverage/**
...
AI 자동 생성 콘텐츠
본 콘텐츠는 Qiita AI의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기