الملحق الخامس: المصطلحات والمفاهيم باللغتين

يضم هذا الملحق أوامر جيت مثل الملحق الثالث، ولكنه أيضا يضم مفاهيم جيت وأنظمة إدارة النسخ الموزعة، ويتناولها جميعًا بشرح موجز مع توضيح أسمائها باللغتين وأسباب هذه الأسماء، ويضم ملاحظات متفرقة للمترجم.

الإيداع والسحب

الغرض الأساسي في أنظمة إدارة النسخ هو أنك تحفظ النسخة الحالية من مجلد العمل كما تحفظ الأموال في المصرف، ثم عندما تحتاجها تأخذها منه. ولكنك لا تأخذها للأبد، بل «تستلفها» مؤقتا مثلما تستلف كتبا من المكتبة العامة.

فعملية السحب هذه لها اسم واحد شائع: check out. أما عملية الحفظ فلها اسمان في الأنظمة المختلفة: check in أو commit.

الدفع والجذب والاستحضار

لأن «سحب» محجوز لـcheck out، فكان علينا الإتيان بلفظ آخر ليعني pull.

العملية المرافقة لـpull هي push، وكلاهما يعرفان بالدفع والجذب، فكان هذان اللفظان مناسبين.

ولكن عملية الجذب pull عمليتان في الحقيقة، أولهما fetch، لإحضار الكائنات (objects) والإشارات (refs) من المستودع البعيد. فكان اللفظ المناسب لها تنزيل أو إحضار، فاخترت استحضار (طلب الحضور) لتمييزها عن الكلمة العامة «إحضار».

الإرجاع والاستعادة والنقض

يفرّق جيت بين الإرجاع reset، والاستعادة restore، والنقض revert، وطبعا إعادة التأسيس rebase.

وقد حاولت أن أجعل أسماءهم العربية متباعدة، تقليلا للخلط الأكيد بينهم.

والخلط بينهم وارد حتى إن دليل (‪“manpage”‬) جت نفسه يخصص فصلا للفرق بينهم، ثم يشير إلى هذا الفصل في دليل كل أمر منهم. فنجد في دليل git فصلا بعنوان ‪“Reset, restore and revert”‬، هذه ترجمته:

في جت ثلاثة أوامر بأسماء متشابهة: الإرجاع git reset، والاستعادة git restore، والنقض git revert.

  • أمر النقض git revert يصنع إيداعا جديدا ينقض (يعكس) فيه التعديلات التي قدّمتها إيداعات سابقة معينة.

  • أمر الاستعادة git restore يستعيد ملفات في شجرة العمل من الفهرس (منطقة التأهيل) أو من إيداع سابق. هذا الأمر لا يحدّث الفرع الحالي. يمكن استعمال هذا الأمر كذلك لاستعادة ملفات في الدليل من إيداع سابق.

  • أمر الإرجاع git reset يحدّث الفرع الحالي بتحريك رأس الفرع ليضيف أو يزيل إيداعات منه. هذه العملية تغيّر تاريخ الإيداعات.

    يمكن استعمال أمر الإرجاع git reset لاستعادة الفهرس، وهو استعمال يشترك فيه مع أمر الاستعادة git restore.

ثم يذكر هذا في دليل أمر النقض git revert :

لاحظ: يُستعمل أمر النقض git revert لتسجيل إيداعات جديدة تنقض (تعكس) تأثير إيداعات سابقة معينة (غالبا إيداعات خاطئة). إن أردت نبذ التعديلات غير المؤهلة جميعا من مجلد العمل، فانظر أمر الإرجاع git reset، تحديدا الخيار --hard. إذا أردت استخلاص ملفات معينة من إيداع سابق، فانظر أمر الاستعادة git restore، تحديدا الخيار --source. كن حذرا في استعمالك هذين البديلين، فكلاهما يلغي التعديلات غير المؤهلة التي في مجلد عملك.

لم أسمِّ أي أمر منهم باسم «إعادة» خشية خلطه على الناس مع «استعادة»، وكذلك لم أسمِّ أمرًا «تراجع» خشية خلطه مع «إرجاع»، بل آثرت جذرا مختلفا لكلٍ منهم.

أسماء أوامر جت

نسمي أوامر جت، وخصوصا الأوامر العلوية (انظر الأوامر السفلية والعلوية (السباكة والبورسلين))، بأسماء عربية، فمثلا أمر git commit اسمه أمر الإيداع، وأمر git branch اسم أمر التفريع، وهكذا.

وأذكر أسماء الأوامر هنا مع وجودها في الملحق الثالث لسببين: الأول أن الملحق الثالث غير منشور لأنه غير مكتمل بعد (فذلك ما في الجدول الأول)، والآخِر لأن من الأوامر المذكورة في الك‍تاب ما لم يُذكر في الملحق الثالث (بعد)، مثل الأوامر الجديدة كأمر الاستعادة git restore وأمر الانتقال git switch، ومثل بعض الأوامر السفلية مثل أمر سرد الملفات git ls-files وأمر استعراض الملف git cat-file (وذلك ما في الجدول الآخِر).

add

إضافة

apply

تطبيق

archive

ضغط

bisect

تفتيش

blame

عتاب

branch

الفرع

checkout

سحب

cherry-pick

اصطفاء

clean

تنظيف

clone

استنساخ

commit

إيداع

config

تهيئة

describe

وصف

diff

الفرق

difftool

أداة الفرق

fast-import

استيراد سريع

fetch

استحضار

format-patch

تنسيق رقعة

fsck

فحص نظام الملفات

gc

جامع المهملات

grep

بحث

help

مساعدة

init

ابتداء

log

السجل

merge

دمج

mergetool

أداة الدمج

mv

نقل

pull

جذب

push

دفع

rebase

إعادة تأسيس

reflog

سجل الإشارات

remote

البعيد

request-pull

طلب جذب

reset

استعادة

revert

إرجاع

rm

إزالة

send-email

أرسل بريد

shortlog

السجل الموجز

show

إظهار

stash

تخبئة

status

الحالة

submodule

وحدة فرعية

tag

وسم

من الأوامر غير المذكورة في الملحق الثالث:

cat-file

استعراض الملف

daemon

العفريت

ls-files

سرد الملفات

ls-remote

سرد البُعداء

ls-tree

سرد الأشجار

restore

استعادة

switch

انتقال

إشارة الرأس وإشارات الكائنات

يقول جيت أحيانا pointer وأحيانا ref أو reference، لكن خلافا لبعض لغات البرمجة، هذه جميعا تعني الشيء نفسه، وهو الشيء الذي «يُشير» إلى كائن أو شيء آخر.

عند التحدث عن الفأرة مثلا، فكلمة «مؤشر» (pointer أو cursor) صحيحة لأنها اسم الفاعل من الفعل «يؤشر» أيْ ذلك الشيء الذي «يضع إشارة». أما عند التحدث عن البرمجة، فإن pointer لا تعني «مؤشر»، لإن الـpointer لا يضع إشارة على شيء، بل يشير إلى شيء، فاللفظ الصحيح هو «مُشِير». وهو اللفظ المستخدم في لغة كلمات.

أما كلمة reference، ففي سياق الكتب تعني الك‍تاب الذي نرجع إليه للبحث عن معلومة، فترجمته إلى «مرجع» عندئذٍ صحيحة. لكن في سياق البرمجة، الـreference لا يَرجع إلى شيء، بل يُرجعنا نحن أو يُحيلنا إلى شيء (refer to)، فترجمته إلى «مُحيل» أفضل.

ولكن المشير والمحيل اسمان لمسمى واحد في جت، فالأفضل توحيد الاسم.

استعملت «مشيرًا» في البدء، ثم وجدت أن الأقرب في الاستعمال هو «إشارة»، فهي ما استعملت في الك‍تاب.

ولمنع اللبس، أقول «إشارة الرأس» غالب الوقت للفظ HEAD.

ولكن جت يفرق بين head وHEAD؛ انظر man gitglossary أو على الشابكة.

التعقب والمتابعة: tracking

يستعمل الفعل tracking في المشاريع البرمجية استعمالين رئيسيين، ويترجم بلفظ مختلف حسب استعماله:

  1. «المتابعة»، وهي أن يتابع الإنسانُ العللَ (bugs) والمسائل (issues) والأهداف (milestones) وغير ذلك. ومنها متابع العلل (bug tracker) أو متابع المسائل (issue tracker).

  2. «التعقب»، وهي (١) أن يتعقب جت ملفًا، أي أن يتابع تغييراته ويرصدها ويسجلها، (٢) وأن تجعل جت يتعقب فرعًا بعيدًا، أن أي يجعل جت فرعا محليا (يسمى «فرعا متعقِّبا») أو إشارة محلية (تسمى «فرعا متعقِّبا لبعيد») تتابع التغييرات الحادثة في الفرع البعيد. (انظر الفصل التالي لتفصيل هذا الأمر.)

الفروع البعيدة والفروع المتعقِّبة لبعيد والفروع المتعقِّبة

يفرق جت وك‍تاب احترف جت بين الفروع المتعقبة (tracking branch) والفروع المتعقبة لبعيد (remote-tracking branch)؛ انظر تعقب الفروع.

لكن لا يبدو أن الك‍تاب يفرق بين الفروع البعيدة (remote branch) والفروع المتعقبة لبعيد (remote-tracking branch)، إلا قليلا، فكلاهما نظرتان للشيء نفسه: الفرع origin/master مثلا هو الفرع الرئيس في المستودع البعيد، فهو في مستودعي المحلي فرع متعقب لبعيد، لكنه يشير إلى الفرع البعيد نفسه. فيجوز قول «الفرع البعيد» للفرع المتعقب لبعيد من باب المجاز المرسل أغلب الوقت. وهذا استعمال الك‍تاب إلا قليلا. (من أمثلة هذا القليل: حذف فروع بعيدة.)

إذنا القراءة والتحرير

أقترح تعريب ‪“read-only”‬ بـ«القراءة»، و ‪“read/write”‬ بـ«التحرير»، والاسم ‪“access”‬ المرتبط بهما غالبا بـ«إذن» (وجمعه «أذون»).

واخترت هذين الفعلين لأنهما متعديان بغير حرف جر، فلا نحتاج أن نقول «الك‍تابة على/إلى/في المستودع»، بل نقول «تحرير المستودع» بغير وسيط. ومثله في القراءة.

و«التحرير» أقوى من «الك‍تابة» المجردة، فهو يعني التعديل والتقويم، وحديثا يشمل المراجعة والإنشاء. فمعناه واضح فيه أنه ‪“read/write”‬، فغالبا لا يوجد إذن «ك‍تابة فقط»، فالأنسب كلمة تدل على القراءة والك‍تابة معا.

وقد استعملت وقتًا قصيرا كلمة «اطلاع» تعريبًا لـ ‪“read”‬، لكني عدلت عنها إلى «قراءة» لحاجة «اطلاع» إلى حرف جر، وعدم وجود منفعة من «اطلاع» (مثل شمول معنى «تحرير»، فصار أنفع من «ك‍تابة»)، ولشهرة «قراءة».

تعريب كلمة كود

لهذه الكلمة معانٍ كثيرة في غير البرمجة، منها رمز ورقم ومعيار وغيرهم.

ومعناها في البرمجة شديد الاتساع ويستعصي على النقل إلى لغة أخرى، فأبى أكثر الناس إلا أن يأخذوا هذه الكلمة بكل معانيها البرمجية. فمنهم من نقلها صوتيا («كود») ومنهم من أتى بكلمة من جذر الكلمة الإنجليزية الأصلية («رمز») في لغتهم، فقال السوريون «رِماز» (على وزن «ك‍تاب») وقال الصينيون 代码 (رمز تبديل(؟)).

ولا أرى في هذا خيرا كثيرا، فهذا لفظ أعجمي في أصله ومعناه واستعماله، وليس فيه من العربية إلا حرفه.

ففي هذا الك‍تاب نحاول تعريب هذه الكلمة في مواضعها المختلفة تعريبا يفهمه العربي بغير شرح وبغير معرفة الاستعمال الإنجليزي وبغير معرفة الاصطلاح السوري.

وصعوبة الأمر أن هذه الكلمة شديدة العموم، فنحتاج إلى تخصيصها في كل سياق قبل تعريبها، فغالبا نعتبرها صفة (=«برمجية») لاسم محذوف، ونرد هذا الاسم عند الترجمة.

فهذه أشهر تعريباتها حسب السياق:

  • «مصدر برمجي» (= ‪“source code”‬) أو «مصدر» فحسب ←

    • «قاعدة المصدر» = ‪“code base”‬ (أو «مصدر برمجي» أيضا)

  • «مشروع برمجي» (مثل العبارة: ‪“hosting your code”‬ وما في معناها)

  • «برمجيات» ←

    • «محرر برمجيات» = ‪“code editor”‬

  • «تعليمات برمجية» ←

    • «ثغرة تنفيذ تعليمات برمجية عشوائية» = ‪“arbitrary code execution vulnerability”‬

    • «تعليمات برمجية خبيثة» = ‪“malicious code”‬

ولم نفرغ من هذه الكلمة بعد.

إصلاحات لغوية عامة ونصائح أسلوبية

بعض هذه النصائح إصلاحات حقيقية، وبعضها ليست سوى اقتراحات لاتساق الترجمة.

  • قل «يستعمل» أغلب الوقت، ولا تقل «يستخدم» إلا للضرورة، فالاستخدام يكون للعاقل. (وتبقى ‪“user”‬ «مستخدما».) ويستثنى من ذلك ما يقدّم خدمة، فنستخدم جت‌هب، ونستخدم الخواديم، ونستخدم جت نفسه تشبيهًا له بالعاقل. ولا بأس من استعمال «استعمال» مع أيٍّ منهم. ولكن قلل من كليهما، لأن استعمال هذا الفعل يكثر في الإنجليزية المعاصرة بغير حاجة. ومثله الفعل «يستطيع».

  • لا تقل «نفس الشيء» وقل «الشيء نفسه». (أو «شيء واحد» أو «الشيء الواحد» عند إرادة الإبهام، مثل «يمكنكم الآن التعاون في مشروع واحد» أو «ستبيت كل مشاريعك البرمجية على جهاز واحد».)

  • لا تقل «بسيط» إلا عندما تعني «غير معقد»، وقلل منها عموما.

  • قلل من «فقط» واستعمل الاستثناء أو «إنما» متى أمكن.

  • قل «يبقى» و«يظل» و«لا يزال» و«ما زال»، لكن لا تقل «لا زال»، فاستعمال «لا» مع الماضي يعني الدعاء، مثل «لا أراك الله مكروها».

  • لا تقل «استبدل» لشيوع الخطأ فيه، وقل «أبدل القديم بالجديد»، فلا خلاف فيه، أو «أبدل من القديم الجديدَ»، أو ائت بفعل من جذر آخر مثل «يحل محل». (الصحاح في مادة بدل: «والأَبْدالُ: قومٌ من الصالحين لا تخلُو الدنيا منهم، إذا مات واحدٌ أَبْدَلَ الله مكانَهُ بآخر.»)

  • لا تستعمل حرف الجر الكاف إلا للتشبيه، وعلامة ذلك استقامة المعنى وثبوته عندما تبدلها بـ«مثل»، وإلا فغيّر تركيب الجملة واستعمل شيئا غير الجر بالكاف، كالتمييز والحال والمفعول به.

  • لا تقل «بداية»، فهي عامية، وفصيحها «بَداءة» لكنه غير مألوف، فقل «بَدء» أو «ابتداء» أو «أول». (قال فيها المصباح المنير: «و"البِدَايَةُ" بالياء مكان الهمز عامي نصّ عليه ابن بري وجماعة». وقال العباب الزاخز: «وقَوْلُ العامَّةِ: البِدايَةُ - مؤازاةً للنِّهاية: لَحْنٌ، ولا تُقاس على الغَدَايا والعَشايا؛ فإنَّها مَسْموعةٌ بخلاف البِداية».)

  • لا تقل «تحقّق من [شيء أو فِعل أو أن تفعل]»؛ قل «تحقّق …» بغير «من»، أو قل «تفقّد …».

  • لا تقل «كل ما عليك هو»؛ إنما قل «ليس عليك سوى/إلا/غير».

  • لا تقل «لا داعٍ لـ…»، بل قل «لا داعيَ إلى …»، بالياء وبـ«إلى».

  • لا تبدأ جملة فرعية بـ«مما»، فهي غالبا خاطئة. وعلامة ذلك اختلال المعنى إذا وضعت مكانها «مِن الذي» أو اسم موصول آخر. أمثلة:

    • «يتيح جت أيضا خيارا للحالة الموجزة، مما يتيح لك رؤية تعديلاتك بإيجاز» ← «…، لترى …»

    • «إضافة [شيء] تجعل جت [يفعل شيئا]، مما يتيح لك تخطي مرحلة الإضافة» ← «…، لتتخطى …»

    • «لأن طريقة التفريع في جت خفيفة […]، مما يجعل إنشاء فرع …» ← «…، فتجعل …»

    • «ثم تستطيع حذف الفرعين […]، مما يجعل تاريخك …» ← «…، فيصير تاريخك …»

    • «تذكر أنه غير مستوثَق، مما يعني أن أي شيء تتيحه …» ← «…، فأي شيء …»

    • «وقتئذٍ ستبيت كل مشاريعك البرمجية على جهاز واحد، مما يزيد من احتمال فقد البيانات فقدا كارثيا.» ← «…، وهذا يُزيد احتمال …»

    • «لم تقترب حاله مما صار عليه اليوم» ← صحيحة

    • «فبدلا مما رأينا، …» ← صحيحة

  • «مِيزة»/«مِيزات» تعني الاختلاف (التمايز، وفصل الشيء من الشيء) ولا تعني التفضيل. فإذا أردت معنى الفضل (التمام والكمال)، فقل «مَزِيَّة»/«مَزَايَا». فترجم ‪“feature”‬ بـ«ميزة» وترجم ‪“advantage”‬ بـ«مزية».

  • قدّم الفعل على فاعله ما لم يسبب ذلك خلطا على القارئ.

  • انظر موارد معجم يسمو، وبالأخص ك‍تاب نحو إتقان الك‍تابة باللغة العربية.