انتقل إلى المحتوى

مرجع CLI

يتضمن Pitmaster واجهة CLI تحاكي مجموعة فرعية من أوامر git. وهي تعمل على المستودع في مجلد العمل الحالي.

سطر الأوامر
./vendor/bin/pitmaster <command> [args...]

في تثبيت Composer، يكون البرنامج النصي ./vendor/bin/pitmaster؛ ومنذ الإصدار 0.2.11 يعثر هناك على محمّل المشروع. وفي نسخة مستنسخة من مستودع Pitmaster نفسه، شغّل ./bin/pitmaster بعد composer install. تستخدم الأمثلة أدناه pitmaster لأي من المسارين. يؤدي تشغيله بلا وسيطات إلى طباعة قائمة الأوامر.

تُحل المراجعات كما في Repository::resolve(): HEAD، وأسماء الفروع والوسوم، وأسماء المراجع الكاملة، والتجزئات الكاملة، وتعبيرات ~N / ^N. لا تُقبل التجزئات المختصرة. لا تتوفر عمليات الاستنساخ والجلب والدفع إلا عبر PHP API.

الأوامر

log

اعرض سجل الإيداعات، من الأحدث أولًا.

سطر الأوامر
# 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 (-n N و-nN و--max-count N و--max-count=N و-N) في الإصدار 0.2.11. والرقم المجرد اختصار خاص بـ Pitmaster لتحديد الحد. أما أول وسيطة أخرى فهي مرشح للمسار؛ وكل ما يأتي بعد -- يُعامل على أنه المسار. وتطبع أي وسيطة أخرى تبدأ بـ - القيمة fatal: unrecognized argument: <arg> ثم تنهي التنفيذ بالرمز 128.

يتضمن الإخراج commit <hash> (بالأصفر)، وسطر Merge: لإيداعات الدمج، وAuthor: مع الهوية الخام (الاسم والبريد الإلكتروني والطابع الزمني والمنطقة الزمنية)، ورسالة الإيداع بمسافة بادئة. تطبع --oneline القيمة abc1234 Subject. يطابق مرشح المسار مسار ملف واحدًا بعينه، ويفحص أحدث خمسة أضعاف الحد من الإيداعات فقط (#7).

show

اعرض تفاصيل الإيداع والفرق بينه وبين الأصل الأول.

سطر الأوامر
# Show HEAD
pitmaster show

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

يعرض بيانات الإيداع الوصفية (مع سطر Date:) ثم فرقًا موحدًا. في حالة الوسم المشروح، يظهر رأس الوسم ورسالته أولًا. تُستخدم الألوان فقط عندما يكون stdout طرفية. وتُعرض إيداعات الدمج من دون فرق.

cat-file

اطبع المحتوى الخام لكائن git.

سطر الأوامر
pitmaster cat-file a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2

يأخذ تجزئة كاملة. ويطبع المحتوى المخزّن للكائن: الكتل والالتزامات والوسوم كنص، والأشجار بصيغتها الثنائية. بخلاف git cat-file -p، لا تُعرض الأشجار بتنسيق مقروء.

status

اعرض حالة شجرة العمل.

سطر الأوامر
pitmaster status
pitmaster status --porcelain=v2

المخرجات:

الكود
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

تظهر الملفات المُضافة إلى الفهرس باللون الأخضر، والملفات غير المُضافة أو غير المدمجة أو غير المتعقبة باللون الأحمر. يظهر قسم Unmerged paths: عند وجود تعارض أثناء الدمج. وتطبع حالة HEAD المنفصل HEAD detached، بينما تطبع الشجرة النظيفة nothing to commit, working tree clean. ويطبع --porcelain=v2 مخرجات Repository::statusPorcelainV2().

diff

اعرض التغييرات بين الفهرس وشجرة العمل (التغييرات غير المُضافة إلى الفهرس).

سطر الأوامر
# 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

المخرجات فرق موحد ملوّن، حتى عندما لا يكون stdout طرفية. وهي تطابق git diff للملفات النصية المعدّلة؛ أما الملفات الجديدة والمحذوفة والثنائية والمعاد تسميتها والمتغيرة الوضع فتُنسّق بشكل مختلف (راجع Diff). لا يطبع diff --cached شيئًا قبل الالتزام الأول (#5).

add

أضف الملفات إلى الفهرس للالتزام التالي.

سطر الأوامر
pitmaster add src/Feature.php
pitmaster add src/Feature.php tests/FeatureTest.php README.md

تُقرأ الملفات من شجرة العمل، وتُكتب ككائنات كتلية، ويُحدّث الفهرس. الوسائط هي مسارات الملفات؛ ولا تُوسّع المجلدات و..

commit

أنشئ التزامًا من الملفات المُضافة إلى الفهرس.

سطر الأوامر
pitmaster commit -m "Add new feature"

المخرجات:

الكود
[main abc1234] Add new feature

يلزم -m، إلا عند إكمال دمج أو انتقاء التزام أو تراجع أو إعادة تأسيس متوقفة، حيث تُستخدم الرسالة المُعدّة. تُحدّد هوية المؤلف والمُلتزِم من متغيرات البيئة والثوابت و.git/config، كما هو موضح في البدء.

branch

اعرض الفروع أو أنشئ فرعًا جديدًا.

سطر الأوامر
# 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

مخرجات عرض القائمة:

الكود
  bugfix/typo
  feature/login
* main

تطبع عملية الإنشاء Created branch <name>، وتطبع عملية الحذف Deleted branch <name>. يعمل -d و-D بالطريقة نفسها: لا يتحقق أي منهما من دمج الفرع، ويرفض كلاهما حذف الفرع المحدد حاليًا.

tag

اعرض الوسوم أو أنشئ وسمًا جديدًا.

سطر الأوامر
# 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"

تطبع عملية الإنشاء Created tag <name>.

checkout

بدّل الفروع أو افصل HEAD.

سطر الأوامر
# 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 والفهرس وشجرة العمل لتطابق الهدف، ويطبع Switched to '<target>'. ويرفض التنفيذ إذا وُجدت تغييرات محلية أو ملفات غير متعقبة في مسارات تختلف بين الشجرتين. أما التغييرات غير المُلتزم بها في الملفات الأخرى المتعقبة، فيستبدلها بمحتوى الهدف، وهو ما يحتفظ به git عادةً (#2)؛ لذا أودِعها في التزام أو خزّنها مؤقتًا أولًا.

merge

ادمج فرعًا واحدًا أو أكثر في HEAD الحالي، أو تابع/ألغِ عملية دمج متوقفة بسبب تعارض.

سطر الأوامر
# 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

المخرجات عند النجاح:

الكود
Merge successful.

المخرجات عند التعارض (على stderr، ورمز الخروج 1):

الكود
CONFLICT in: src/File.php, src/Other.php

يقبل -s الوسائط ours وort وrecursive؛ ويستخدم كل من ort وrecursive الدمج الافتراضي. مع -s، يطبع CLI Merge successful. وينتهي برمز 0 حتى إذا توقف الدمج بسبب تعارض (#21)، لذا تحقّق من status بعد ذلك. ينتهي merge --continue برمز 128 إذا لم تكن هناك عملية دمج جارية. ويؤدي دمج فرع سبق دمجه إلى إنشاء التزام دمج آخر (#6)، كما تُستبدل التغييرات غير المُلتزم بها في الملفات المتعقبة كما يحدث مع checkout.

cherry-pick

طبّق التزامًا فوق HEAD الحالي، أو تابع/ألغِ عملية متوقفة بسبب تعارض.

سطر الأوامر
# 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

لا يطبع شيئًا عند النجاح. ينتهي كل من --continue و--abort برمز 128 إذا لم تكن هناك عملية انتقاء التزام جارية.

revert

أنشئ التزام تراجع، أو تابع/ألغِ عملية متوقفة بسبب تعارض.

سطر الأوامر
# 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

لا يطبع شيئًا عند النجاح. ينتهي كل من --continue و--abort برمز 128 إذا لم تكن هناك عملية تراجع جارية.

rebase

أعِد تأسيس الفرع الحالي على مرجع آخر.

سطر الأوامر
# 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

لا يطبع شيئًا عند النجاح. أما --continue و--skip و--abort، إذا لم تكن هناك عملية إعادة تأسيس جارية، فتطبع fatal: no rebase in progress وتنتهي برمز 128.

bisect

اعثر على الالتزام الذي أدخل تغييرًا باستخدام البحث الثنائي.

سطر الأوامر
# 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 وbad التجزئة الكاملة للمرشح التالي، الذي يتم تحديده حاليًا. عندما يتبقى مشتبه به واحد، تُطبع التجزئة نفسها مرة أخرى: فهذا هو أول التزام معيب. بخلاف git، لا تُطبع خلاصة «هذا هو أول التزام معيب».

stash

احفظ تغييرات دليل العمل واستعدها.

سطر الأوامر
# 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

الرسالة هي الوسيط الذي يلي push أو save؛ أما -m فغير مدعوم وسيُخزّن كنص الرسالة. يستخدم كل من pop وapply وdrop دائمًا stash@{0}. وتطبع هذه الأوامر Saved working directory to stash abc1234 وApplied and dropped stash وApplied stash وDropped stash.

مخرجات قائمة التخزين المؤقت:

الكود
stash@{0}: On main: Work in progress on login
stash@{1}: WIP on main: abc1234 Add new feature

عند وجود أكثر من إدخال، يُبقي drop وpop الإدخال حاليًا في القائمة (#10)، ويستبدل apply التغييرات غير المُلتزم بها في الملفات التي لا تمسها اللقطة المؤقتة (#11).

blame

اعرض مؤلف كل سطر في ملف عند HEAD.

سطر الأوامر
pitmaster blame src/Repository.php

المخرجات:

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

يعرض كل سطر أول 8 أحرف من تجزئة الالتزام وأول 30 حرفًا من هوية المؤلف (Name <email> timestamp timezone)، دون حشو.

grep

ابحث في محتويات الملفات ضمن شجرة HEAD الحالية.

سطر الأوامر
pitmaster grep "function merge"
pitmaster grep -i -E "h.llo"

المخرجات:

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

يجب أن تسبق الخيارات النمط:

  • -i، --ignore-case: مطابقة دون تمييز حالة الأحرف
  • -E، --extended-regexp، --regex: تعامل مع النمط كتعبير نمطي PCRE

المخرجات نص عادي path:line:content بلا ألوان.

reflog

اعرض إدخالات reflog، الأحدث أولًا.

سطر الأوامر
# 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"

التنسيق الافتراضي هو %gd: %gs (HEAD@{0}: commit: Add feature). العناصر النائبة المدعومة: %gd و%gD (المحدد)، و%gs (الرسالة)، و%H و%h (التجزئة الجديدة كاملة ومختصرة). تقبل الحدود -n N و-nN و--max-count N؛ ويطبع -n 0 جميع الإدخالات.

لا تسجل المستودعات التي ينشئها pitmaster init سجلات reflog ما لم تُضبط core.logallrefupdates على true في .git/config (#8)، لذا لا يطبع reflog فيها شيئًا حتى يتم ذلك.

refs

اعرض جميع المراجع مع تجزئاتها.

سطر الأوامر
pitmaster refs

المخرجات:

الكود
abc123def456... refs/heads/main
789012abc345... refs/heads/feature/login
def456789012... refs/tags/v1.0.0

تُطبع التجزئات كاملة.

reset

أعِد ضبط HEAD إلى التزام محدد.

سطر الأوامر
# 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

يلزم تحديد مراجعة. المخرجات:

الكود
HEAD is now at abc1234

init

أنشئ مستودعًا جديدًا. هذا هو الأمر الوحيد الذي لا يحتاج إلى مستودع موجود.

سطر الأوامر
# 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

المخرجات:

الكود
Initialized empty Pitmaster repository in /path/to/new-project/.git/

يقبل --object-format الخيار sha1 (الافتراضي) وsha256.

رموز الخروج

الرمز المعنى
0 نجاح
1 خطأ في الأمر: خطأ استخدام، أمر غير معروف، فشل العملية (error: <message>)، أو توقف الدمج بسبب تعارض
128 ليس مستودع git (fatal: <message>)، أو وسيطة log غير معروفة، أو استخدام --continue / --abort / --skip دون وجود عملية جارية