İçeriğe geç

CLI Başvurusu

Pitmaster, git komutlarının bir alt kümesini yansıtan bir CLI içerir. Geçerli çalışma dizinindeki depo üzerinde çalışır.

Kabuk
./vendor/bin/pitmaster <command> [args...]

Bir Composer kurulumunda betik ./vendor/bin/pitmaster konumundadır; 0.2.11 nedeniyle projenin otomatik yükleyicisini orada bulur. Doğrudan Pitmaster deposunun ödeme kopyasındaysanız, composer install sonrasında ./bin/pitmaster komutunu çalıştırın. Aşağıdaki örneklerde her iki yol için de pitmaster kullanılır. Bağımsız değişken olmadan çalıştırıldığında komut listesini yazdırır.

Revizyonlar Repository::resolve() gibi çözümlenir: HEAD, dal ve etiket adları, tam ref adları, tam karmalar ve ~N / ^N ifadeleri. Kısaltılmış karmalar kabul edilmez. Klonlama, getirme ve gönderme işlemleri yalnızca PHP API üzerinden kullanılabilir.

Komutlar

log

En yeniden başlayarak commit geçmişini gösterir.

Kabuk
# Default: last 10 commits
pitmaster log

# Limit the number of commits
pitmaster log 25
pitmaster log -n 3
pitmaster log -n3
pitmaster log --max-count 3
pitmaster log --max-count=3
pitmaster log -3

# Commits that touch one file
pitmaster log src/Repository.php
pitmaster log -- src/Repository.php

# Commits reachable from all refs, and one line per commit
pitmaster log --all
pitmaster log --oneline

git limit gösterimleri (-n N, -nN, --max-count N, --max-count=N, -N), 0.2.11 sürümünde eklendi. Tek başına bir sayı, Pitmaster için limitin kısa yazımıdır. İlk diğer bağımsız değişken bir yol filtresidir; -- sonrasındaki her şey yol olarak ele alınır. - ile başlayan diğer tüm bağımsız değişkenler fatal: unrecognized argument: <arg> yazdırır ve 128 ile çıkar.

Çıktı, commit <hash> (sarı), birleştirme commit'leri için Merge: satırını, ham kimliği (ad, e-posta, zaman damgası ve saat dilimi) içeren Author: değerini ve girintili commit mesajını içerir. --oneline, abc1234 Subject yazdırır. Yol filtresi tam bir dosya yoluyla eşleşir ve limit commit'lerinin en yeni beş katını inceler (#7).

show

Commit ayrıntılarını ve ilk üst öğeye göre farkı gösterir.

Kabuk
# Show HEAD
pitmaster show

# Show a specific commit
pitmaster show HEAD~3
pitmaster show v1.0.0
pitmaster show 3f2c1e0b9d6a4f8e7c5b2a1d0e9f8c7b6a5d4e3f

Commit meta verilerini (Date: satırıyla) ve ardından birleşik farkı görüntüler. Açıklamalı bir etiket için önce etiket başlığı ve mesajı gelir. Renkler yalnızca standart çıktı bir terminal olduğunda kullanılır. Birleştirme commit'leri fark olmadan gösterilir.

cat-file

Bir git nesnesinin ham içeriğini yazdırır.

Kabuk
pitmaster cat-file a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2

Tam bir karma alır. Nesnenin saklanan içeriğini yazdırır: blob'ları, commit'leri ve etiketleri metin olarak; ağaçları ise ikili biçimlerinde gösterir. git cat-file -p aksine ağaçlar biçimlendirilerek yazdırılmaz.

status

Çalışma ağacı durumunu gösterir.

Kabuk
pitmaster status
pitmaster status --porcelain=v2

Çıktı:

Kod
On branch main

Changes to be committed:
	new file:   src/Feature.php

Changes not staged for commit:
	modified:   src/Existing.php

Untracked files:
	notes.txt

Hazırlanmış dosyalar yeşil; hazırlanmamış, birleştirilmemiş ve izlenmeyen dosyalar kırmızı gösterilir. Çakışmalı bir birleştirme sırasında Unmerged paths: bölümü görünür. Ayrık HEAD, HEAD detached yazdırır; temiz bir ağaç ise nothing to commit, working tree clean yazdırır. --porcelain=v2, Repository::statusPorcelainV2() çıktısını yazdırır.

diff

Dizin ile çalışma ağacı arasındaki değişiklikleri (hazırlanmamış değişiklikleri) gösterir.

Kabuk
# Unstaged changes
pitmaster diff

# Staged changes (index vs HEAD)
pitmaster diff --cached
pitmaster diff --staged

# Choose the algorithm
pitmaster diff --patience
pitmaster diff --histogram
pitmaster diff --minimal

Çıktı, standart çıktı bir terminal olmasa da renklendirilmiş birleşik farktır. Değiştirilmiş metin dosyaları için git diff ile eşleşir; yeni, silinmiş, ikili, yeniden adlandırılmış ve modu değişmiş dosyalar farklı biçimlendirilir (bkz. Fark). İlk commit'ten önce diff --cached hiçbir şey yazdırmaz (#5).

add

Sonraki commit için dosyaları hazırlayın.

Kabuk
pitmaster add src/Feature.php
pitmaster add src/Feature.php tests/FeatureTest.php README.md

Her dosya çalışma ağacından okunur, blob nesnesi olarak yazılır ve dizin güncellenir. Bağımsız değişkenler dosya yollarıdır; dizinler ve . genişletilmez.

commit

Hazırlanan dosyalardan bir commit oluşturur.

Kabuk
pitmaster commit -m "Add new feature"

Çıktı:

Kod
[main abc1234] Add new feature

-m gereklidir; ancak hazırlanmış mesajın kullanıldığı, durdurulmuş birleştirme, kiraz toplama, geri alma veya yeniden tabanlama tamamlanırken gerekli değildir. Yazar ve commit'i oluşturan kişi; ortam değişkenlerinden, sabitlerden ve .git/config içinden, Başlarken bölümünde açıklandığı gibi belirlenir.

branch

Dalları listeler veya yeni bir dal oluşturur.

Kabuk
# List all branches (current marked with *)
pitmaster branch

# Create a new branch from HEAD
pitmaster branch feature/new-thing

# Delete a branch
pitmaster branch -d feature/old
pitmaster branch -D feature/old

Listeleme çıktısı:

Kod
  bugfix/typo
  feature/login
* main

Oluşturma Created branch <name>, silme Deleted branch <name> yazdırır. -d ve -D aynı şekilde çalışır: hiçbiri dalın birleştirilmiş olup olmadığını kontrol etmez ve ikisi de kullanıma alınmış dalı silmeyi reddeder.

tag

Etiketleri listeler veya yeni bir etiket oluşturur.

Kabuk
# List all tags
pitmaster tag

# Create a lightweight tag at HEAD
pitmaster tag v1.0.0

# Create an annotated tag at HEAD
pitmaster tag v2.0.0 -m "Release version 2.0.0"

Oluşturma Created tag <name> yazdırır.

checkout

Dalları değiştirir veya HEAD'i ayırır.

Kabuk
# Switch to a branch
pitmaster checkout feature/login

# Detach HEAD at a tag or commit
pitmaster checkout v1.0.0
pitmaster checkout HEAD~2

HEAD'i, dizini ve çalışma ağacını hedefle eşleşecek şekilde günceller ve Switched to '<target>' yazdırır. İki ağaç arasında farklı olan yollarda yerel değişiklikler veya izlenmeyen dosyalar varsa işlemi reddeder. Diğer izlenen dosyalardaki commit edilmemiş değişikliklerin üzerine, git bunları koruyacak olsa da hedefin içeriği yazılır (#2); önce commit edin veya stash'e alın.

merge

Bir veya daha fazla dalı geçerli HEAD ile birleştirir ya da devam eden bir birleştirme çakışmasını sürdürür/iptal eder.

Kabuk
# Start a merge
pitmaster merge feature/login

# Merge with a strategy
pitmaster merge -s ours feature/login

# Octopus merge of several branches
pitmaster merge feature/a feature/b

# Continue after resolving conflicts
pitmaster add a.txt
pitmaster merge --continue

# Abort and restore the pre-merge state
pitmaster merge --abort

Başarılı olduğunda çıktı:

Kod
Merge successful.

Çakışma olduğunda çıktı (stderr'e, çıkış kodu 1):

Kod
CONFLICT in: src/File.php, src/Other.php

-s, ours, ort ve recursive kabul eder; ort ile recursive ikisi de varsayılan birleştirmeyi kullanır. -s ile CLI, birleştirme çakışmalar nedeniyle durduğunda bile Merge successful. yazdırır ve 0 ile çıkar (#21); bu yüzden sonrasında status kontrol edin. Devam eden bir birleştirme yokken merge --continue, 128 ile çıkar. Zaten birleştirilmiş bir dalı birleştirmek yeni bir birleştirme commit'i oluşturur (#6); izlenen dosyalardaki commit edilmemiş değişikliklerin üzerine de checkout ile aynı şekilde yazılır.

cherry-pick

Geçerli HEAD üzerine bir commit uygular ya da devam eden bir çakışmayı sürdürür/iptal eder.

Kabuk
# Start a cherry-pick
pitmaster cherry-pick feature~1

# Continue after resolving conflicts
pitmaster add a.txt
pitmaster cherry-pick --continue

# Abort and restore HEAD
pitmaster cherry-pick --abort

Başarılı olduğunda hiçbir şey yazdırmaz. Devam eden bir kiraz toplama işlemi yokken --continue ve --abort, 128 ile çıkar.

revert

Bir geri alma commit'i oluşturur ya da devam eden bir çakışmayı sürdürür/iptal eder.

Kabuk
# Start a revert
pitmaster revert HEAD~1

# Continue after resolving conflicts
pitmaster add a.txt
pitmaster revert --continue

# Abort and restore HEAD
pitmaster revert --abort

Başarılı olduğunda hiçbir şey yazdırmaz. Devam eden bir geri alma işlemi yokken --continue ve --abort, 128 ile çıkar.

rebase

Geçerli dalı başka bir ref üzerine yeniden tabanlar.

Kabuk
# Start a rebase
pitmaster rebase main

# Continue after resolving conflicts
pitmaster rebase --continue

# Skip the current commit
pitmaster rebase --skip

# Abort and restore the original branch tip
pitmaster rebase --abort

Başarılı olduğunda hiçbir şey yazdırmaz. Devam eden bir yeniden tabanlama işlemi yokken --continue, --skip ve --abort, fatal: no rebase in progress yazdırır ve 128 ile çıkar.

bisect

Bir değişikliği başlatan commit'i ikili aramayla bulur.

Kabuk
# Start with a bad and a good revision; checks out and prints the first candidate
pitmaster bisect start HEAD v1.0.0

# Mark the checked-out candidate (or a given revision)
pitmaster bisect good
pitmaster bisect bad
pitmaster bisect bad HEAD~3

# End the session and return to the starting branch
pitmaster bisect reset

start, good ve bad, kullanıma alınan sonraki adayın tam karmasını yazdırır. Tek bir şüpheli kaldığında aynı karma yeniden yazdırılır: o commit ilk hatalı commit'tir. git aksine, "ilk hatalı commit budur" özeti yazdırılmaz.

stash

Çalışma dizini değişikliklerini kaydeder ve geri yükler.

Kabuk
# Save current changes (push)
pitmaster stash
pitmaster stash push
pitmaster stash push "Work in progress on login"
pitmaster stash save "Work in progress on login"

# Apply and remove the top stash entry
pitmaster stash pop

# Apply without removing
pitmaster stash apply

# List stash entries
pitmaster stash list

# Drop the top stash entry
pitmaster stash drop

Mesaj, push veya save sonrasındaki bağımsız değişkendir; -m desteklenmez ve mesaj olarak saklanır. pop, apply ve drop her zaman stash@{0} kullanır. Şunları yazdırırlar: Saved working directory to stash abc1234, Applied and dropped stash, Applied stash ve Dropped stash.

Stash listesi çıktısı:

Kod
stash@{0}: On main: Work in progress on login
stash@{1}: WIP on main: abc1234 Add new feature

Birden fazla girdi olduğunda drop ve pop girdiyi şimdilik listede bırakır (#10); apply ise stash'in dokunmadığı dosyalardaki commit edilmemiş değişikliklerin üzerine yazar (#11).

blame

HEAD'deki bir dosyanın satır satır yazarlığını gösterir.

Kabuk
pitmaster blame src/Repository.php

Çıktı:

Kod
a1b2c3d4 (Jane Smith <jane@example.com> ) <?php
a1b2c3d4 (Jane Smith <jane@example.com> )
f5e6d7c8 (Ann Lee <ann@example.com> 1700) declare(strict_types=1);

Her satır, commit karmasının ilk 8 karakterini ve yazar kimliğinin (Name <email> timestamp timezone) ilk 30 karakterini doldurma olmadan gösterir.

grep

Geçerli HEAD ağacındaki dosya içeriklerinde arama yapar.

Kabuk
pitmaster grep "function merge"
pitmaster grep -i -E "h.llo"

Çıktı:

Kod
src/Repository.php:2257:    public function merge(string $branch, string $strategy = 'recursive'): MergeResult
src/Merge/ThreeWayMerge.php:23:    public static function merge(

Seçenekler desenden önce gelmelidir:

  • -i, --ignore-case: büyük/küçük harfe duyarsız eşleştirme
  • -E, --extended-regexp, --regex: deseni PCRE düzenli ifadesi olarak ele alır

Çıktı, renkler olmadan düz path:line:content metnidir.

reflog

En yeniden başlayarak reflog girdilerini gösterir.

Kabuk
# HEAD reflog (default: 10 entries)
pitmaster reflog

# Another ref, a custom limit, and a format
pitmaster reflog show refs/heads/main
pitmaster reflog -n 5
pitmaster reflog --format="%h %gs"

Varsayılan biçim %gd: %gs (HEAD@{0}: commit: Add feature) şeklindedir. Desteklenen yer tutucular: seçici için %gd ve %gD, mesaj için %gs, tam ve kısa yeni karma için %H ve %h. Limitler -n N, -nN ve --max-count N kabul eder; -n 0 tüm girdileri yazdırır.

core.logallrefupdates, .git/config içinde true olarak ayarlanmadıkça pitmaster init tarafından oluşturulan depolar reflog kaydetmez (#8); bu nedenle reflog, ayarlanana kadar orada hiçbir şey yazdırmaz.

refs

Tüm ref'leri karmalarıyla birlikte listeler.

Kabuk
pitmaster refs

Çıktı:

Kod
abc123def456... refs/heads/main
789012abc345... refs/heads/feature/login
def456789012... refs/tags/v1.0.0

Karmalar tam olarak yazdırılır.

reset

HEAD'i belirli bir commit'e sıfırlar.

Kabuk
# Mixed reset (HEAD + index, default)
pitmaster reset HEAD~1
pitmaster reset --mixed HEAD~1

# Soft reset (HEAD only)
pitmaster reset --soft HEAD~1

# Hard reset (HEAD + index + worktree)
pitmaster reset --hard HEAD~3

Bir revizyon gereklidir. Çıktı:

Kod
HEAD is now at abc1234

init

Yeni bir depo başlatır. Mevcut bir depo gerektirmeyen tek komut budur.

Kabuk
# Initialize in the current directory
pitmaster init

# Initialize at a specific path
pitmaster init /path/to/new-project

# Create a SHA-256 repository
pitmaster init --object-format=sha256
pitmaster init /path/to/new-project --object-format=sha256

Çıktı:

Kod
Initialized empty Pitmaster repository in /path/to/new-project/.git/

--object-format, sha1 (varsayılan) ve sha256 kabul eder.

Çıkış kodları

Kod Anlam
0 Başarılı
1 Komut hatası: kullanım hatası, bilinmeyen komut, başarısız işlem (error: <message>) veya çakışmalar nedeniyle durmuş bir birleştirme
128 git deposu değil (fatal: <message>), tanınmayan bir log bağımsız değişkeni ya da devam eden işlem yokken --continue / --abort / --skip