본문으로 건너뛰기

Pitmaster

Git는 PHP에서 저장소를 읽고 쓰며, diff와 병합을 수행하고, 셸로 git을 실행하지 않고 스마트 HTTP 통신을 합니다.

터미널
composer require pitmaster/pitmaster

최신 릴리스 v0.2.11 MIT PHP 8.2+

실제 사용

저장소를 연 다음 메서드 호출이나 셸을 통해 읽고 씁니다.

PHP에서 저장소 읽기

Pitmaster::open()는 .git 디렉터리를 찾아 저장소 핸들을 반환합니다. 각 상태 항목에는 인덱스와 작업 트리에 대한 별도의 상태가 담깁니다.

셸에서 ./vendor/bin/pitmaster는 git 명령 일부를 미러링하며 0.2.11이므로 Composer 설치 환경에서도 작동합니다.

PHP
use Pitmaster\Pitmaster;

$repo = Pitmaster::open('/path/to/project');

// Read the current HEAD commit
$head = $repo->head();
echo $head->message;

// List branches
foreach ($repo->branches() as $branch) {
    echo $branch . "\n";
}

// Check status
foreach ($repo->status() as $entry) {
    echo "{$entry->path}: {$entry->index->value}{$entry->worktree->value}\n";
}

git 바이너리 불필요

핵심 작업은 git 바이너리나 FFI 없이 PHP 8.2+에서 실행됩니다. 훅과 SSH 대체 방식은 프로세스를 시작합니다. ['hooks' => false] 또는 processFreeOptions()를 전달하면 비활성화됩니다.

읽기 및 쓰기

느슨한 객체, 델타 해석을 포함한 팩 파일, 인덱스, 참조, 설정을 지원합니다. git은 인덱스 버전 2 및 3과 느슨한 참조에 대해 Pitmaster가 기록한 데이터를 읽습니다.

Diff 및 병합

이름 변경 감지를 지원하는 Myers, patience, histogram diff. 충돌 마커를 사용하는 3방향 병합.

네트워크 프로토콜

스마트 HTTP 또는 SSH를 통해 복제, 가져오기, 푸시를 지원하며, 복제와 가져오기는 dumb HTTP 대체 방식을 사용합니다. 프로토콜 v2는 하위 수준 클라이언트에서 사용할 수 있습니다.

Git 작업

추가, 커밋, 상태, diff, 병합, 체크아웃, 초기화, 스태시, 체리 픽, 되돌리기, 리베이스, 블레임, grep.

CLI

init, log, status, diff, add, commit, branch, merge, stash, blame, grep을 포함한 git 스타일 명령 22개. clone, fetch, push는 라이브러리에서만 사용할 수 있습니다.

오라클 테스트 완료

761개 시나리오는 실제 git에서 캡처한 출력과 결과를 비교하며 CI에서 실행됩니다. 605개 시나리오는 git 자체, libgit2, go-git, isomorphic-git, dulwich 및 JGit의 테스트 모음에서 가져왔습니다.

전체 검색

셸에서 git을 실행하지 않고 blame, grep, bisect, notes 및 로그 경로 필터를 사용할 수 있습니다.

Pitmaster를 사용하는 이유

git 설치 없이 작동

커밋, diff, 상태, 기록을 PHP에서 계산하므로 git 바이너리가 없는 컨테이너와 호스트에서도 저장소 작업을 할 수 있습니다.

프로세스를 시작하지 않는 핸들

Pitmaster::processFreeOptions()는 훅, fsmonitor 훅, clone, fetch, push, SSH 프로세스 전송을 비활성화합니다. 로컬 읽기 및 쓰기는 계속 작동합니다.

git과 대조 검증

통합 테스트는 git 바이너리를 대상으로 실행되며, 지원 매트릭스는 선언된 호환성 범위 내에서 해당 범위에 포함된 기능 146개 중 146개가 기준 구현으로 검증되었는지 보여줍니다.

SHA-1 및 SHA-256

SHA-256 저장소를 Pitmaster::init($path, 'sha256') 또는 init --object-format=sha256로 만드세요. 팩 파일은 읽고 쓸 수 있으며, commit-graph, multi-pack index, reftable 파일은 읽을 수 있습니다.

비교 대상

PHP에서 Git 저장소를 다루는 다른 방법과 Pitmaster와의 차이점을 살펴봅니다.

Pitmaster와 다른 도구 비교
git (명령줄) 잘하는 점참조 구현으로, 고수준 작업과 내부 기능에 대한 전체 액세스를 모두 지원하는 풍부한 명령 세트를 제공합니다. Pitmaster와의 차이점Pitmaster는 PHP 프로세스 내부에서 실행되며 핵심 작업은 git을 셸로 호출하지 않습니다. CLI는 git 명령의 일부만 구현합니다.
czproject/git-php 잘하는 점init, clone, commit, merge, 브랜치, 태그 및 원격 저장소를 위한 간결한 PHP API입니다. PHP 8.0 이상에서 실행되며 설치된 git 클라이언트를 사용합니다. Pitmaster와의 차이점Pitmaster는 객체, 팩 파일 및 인덱스를 직접 읽고 쓰므로 핵심 작업에 git 클라이언트가 필요하지 않습니다. PHP 8.2 이상이 필요합니다.
gitonomy/gitlib 잘하는 점빌드 없이 PHP 8.4 이상에서 저장소에 액세스합니다. git을 셸 명령으로 호출해 작동합니다. Pitmaster와의 차이점Pitmaster는 핵심 작업에서 셸을 호출하지 않으며, 프로세스 없는 핸들을 사용하면 프로세스를 시작하는 기능이 비활성화됩니다.
libgit2 잘하는 점Git 핵심 메서드를 링크 가능한 라이브러리로 구현한 이식성 높은 C 구현으로, Ruby, .NET, Python, Node.js, Rust 등을 위한 바인딩을 제공합니다. Pitmaster와의 차이점Pitmaster는 Composer와 함께 설치되는 순수 PHP이며, 컴파일된 라이브러리나 FFI가 없습니다. libgit2 테스트 리소스에서 기준 시나리오 63개를 가져옵니다.

질문과 답변

Pitmaster 문서의 간단한 답변.

시작하기 가이드에 따라 PHP에서 첫 저장소를 여세요. 나머지 내용은 API 및 CLI 참고 자료에서 확인할 수 있습니다.