المحتوى عن 'checkout'.



مزيد من الخيارات

  • ابحث بالكلمات المفتاحية

    أضف وسومًا وافصل بينها بفواصل ","
  • ابحث باسم الكاتب

نوع المُحتوى


التصنيفات

  • التخطيط وسير العمل
  • التمويل
  • فريق العمل
  • دراسة حالات
  • نصائح وإرشادات
  • التعامل مع العملاء
  • التعهيد الخارجي
  • التجارة الإلكترونية
  • الإدارة والقيادة
  • مقالات ريادة أعمال عامة

التصنيفات

  • PHP
    • Laravel
    • ووردبريس
  • جافاسكريبت
    • Node.js
    • jQuery
    • AngularJS
    • Cordova
  • HTML
    • HTML5
  • CSS
  • SQL
  • سي شارب #C
    • منصة Xamarin
  • بايثون
    • Flask
    • Django
  • لغة روبي
    • Sass
    • إطار عمل Bootstrap
    • إطار العمل Ruby on Rails
  • لغة Go
  • لغة جافا
  • لغة Kotlin
  • برمجة أندرويد
  • لغة Swift
  • لغة R
  • لغة TypeScript
  • ASP.NET
    • ASP.NET Core
  • سير العمل
    • Git
  • صناعة الألعاب
    • Unity3D
  • مقالات برمجة عامة

التصنيفات

  • تجربة المستخدم
  • الرسوميات
    • إنكسكيب
    • أدوبي إليستريتور
    • كوريل درو
  • التصميم الجرافيكي
    • أدوبي فوتوشوب
    • أدوبي إن ديزاين
    • جيمب
  • التصميم ثلاثي الأبعاد
    • 3Ds Max
    • Blender
  • نصائح وإرشادات
  • مقالات تصميم عامة

التصنيفات

  • خواديم
    • الويب HTTP
    • قواعد البيانات
    • البريد الإلكتروني
    • DNS
    • Samba
  • الحوسبة السّحابية
    • Docker
  • إدارة الإعدادات والنّشر
    • Chef
    • Puppet
    • Ansible
  • لينكس
  • FreeBSD
  • حماية
    • الجدران النارية
    • VPN
    • SSH
  • مقالات DevOps عامة

التصنيفات

  • التسويق بالأداء
    • أدوات تحليل الزوار
  • تهيئة محركات البحث SEO
  • الشبكات الاجتماعية
  • التسويق بالبريد الالكتروني
  • التسويق الضمني
  • التسويق بالرسائل النصية القصيرة
  • استسراع النمو
  • المبيعات
  • تجارب ونصائح

التصنيفات

  • إدارة مالية
  • الإنتاجية
  • تجارب
  • مشاريع جانبية
  • التعامل مع العملاء
  • الحفاظ على الصحة
  • التسويق الذاتي
  • مقالات عمل حر عامة

التصنيفات

  • الإنتاجية وسير العمل
    • مايكروسوفت أوفيس
    • ليبر أوفيس
    • جوجل درايف
    • شيربوينت
    • Evernote
    • Trello
  • تطبيقات الويب
    • ووردبريس
    • ماجنتو
  • أندرويد
  • iOS
  • macOS
  • ويندوز

التصنيفات

  • شهادات سيسكو
    • CCNA
  • شهادات مايكروسوفت
  • شهادات Amazon Web Services
  • شهادات ريدهات
    • RHCSA
  • شهادات CompTIA
  • مقالات عامة

أسئلة وأجوبة

  • الأقسام
    • أسئلة ريادة الأعمال
    • أسئلة العمل الحر
    • أسئلة التسويق والمبيعات
    • أسئلة البرمجة
    • أسئلة التصميم
    • أسئلة DevOps
    • أسئلة البرامج والتطبيقات
    • أسئلة الشهادات المتخصصة

التصنيفات

  • ريادة الأعمال
  • العمل الحر
  • التسويق والمبيعات
  • البرمجة
  • التصميم
  • DevOps

تمّ العثور على 3 نتائج

  1. في الدروس السابقة قمنا بتغطية خطوات تنصيب WooCommerce على مواقع ووردبريس، بالإضافة إلى ضبط إعدادات المنتجات Products وضبط إعدادات الضرائب Taxes. وفي هذا الدرس سنواصل ما بدأناه ونناقش خيارات الدفع للمتاجر على WooCommerce. توجد العديد من بوابات الدفع checkout gateways التي يتم تثبيتها تلقائيًا مع WooCommerce وكل بوابة لها إعداداتها الخاصة حيث يمكنك إدارة طرق الدفع على متجرك. لنلقِ نظرة عليها: قم أولا بتسجيل الدخول إلى موقعك ثم اذهب إلى: Dashboard > WooCommerce > Settings > Checkout خيارات الدفع العامة توجد هذه الخيارات ضمن تبويب Checkout Options الفرعي، والذي يحتوي على عدة أقسام: القسائم Coupons إذا كنت تنوي استخدام القسائم قم بتأشير الخيار Enable the use of coupons (سنشرح طريقة إنشاء القسائم في درس لاحق -إن شاء الله-). بعدها قم بتأشير الخيار Calculate coupon discounts sequentially إذا رغبت في أن يتم حساب تخفيض القسائم بالتتابع. على سبيل المثال، لنفترض أنّ السعر الكلي لطلب المشتري 100$، وكانت لديه قسيمة تخفيض 10%، وأخرى 20%. سيتم أولا تطبيق القسيمة الأولى على السعر الكلّي، وبذلك يخفّض السعر إلى 90$. ثم يتم تطبيق القسيمة الثانية على السعر المخفّض (أي على 90$)، وبذلك يصبح السعر الكلّي للطلب بعد استخدام القسائم 72$. إذا تركت الخيار أعلاه غير مؤشر، سيتم جمع قيم القسائم معًا ثم تُطبّق على السعر الكلي. أي تصبح قيمة القسيمة للمثال أعلاه 30% (10% +20%)، وعند تطبيق القسيمة على 100$، سيُخفّض إلى 70$. تُعتبر القسائم من الأجزاء الفعّالة في استراتيجياتك في التسويق والمبيعات، لذلك اختر ما تراه مناسبًا لمتجرك. الدفع Checkout من هذا القسم يمكنك تأشير الخيار Enable guest checkout والذي عند تفعيله ستتيح للعملاء إمكانية الدفع دون الحاجة إلى إنشاء حساب وتسجيل الدخول. وبخلاف ذلك، عند إلغاء تأشيره سيتطلّب من العميل تسجيل الدخول قبل الدفع. الخيار الثاني في هذا القسم هو Force secure checkout والذي ننصحك باستخدامه بشدّة. إذا كانت بوابات الدفع التي تستخدمها تقبل تفاصيل البطاقة على الموقع onsite، فهذا الخيار مطلوب بالإضافة إلى شهادة SSL. حتّى وإن كانت عملية الدفع لا تتم بالكامل على الموقع offsite ننصح باستخدام هذا الخيار، لأنّ صفحة الدفع لمتجرك ستقوم بجمع بيانات شخصية يتوّقع عملاؤك أن تقوم بحمايتها. تأكّد فقط من تثبيت شهادة SSL من طرف المضيف host الذي تستخدمه أو من طرفك. عند تأشير الخيار أعلاه سيظهر خيار آخر، وهو Force HTTP when leaving the checkout. عند تأشير هذا الخيار ستُجبر جميع الصفحات على متجرك (باستثناء صفحات الدفع) على التحميل عبر HTTP بدلًا من (SSL (HTTPS. وهو مفيد إذا كانت بعض بوابات الدفع تتطلب هذا الأمر. صفحات الدفع Checkout Pages إذا قمت باستخدام مرشد التهيئة عند تثبيت ملحق WooCommerce (كما شرحنا في الدرس الأول)، ستجد أن صفحات السلة Cart والدفع Checkout معَدّة مسبقًا. مع ذلك يمكنك من هذا القسم اختيار الصفحات التي تريد من WooCommerce أن يستخدمها لصفحة السّلة، الدفع، أو الأحكام والشروط Terms and Conditions. تأكّد من وجود صفحتي السّلة والدفع، وإلّا لن يتمكّن العميل من الشراء والدفع. أما صفحة الأحكام والشروط فهي اختيارية، لكن عند إنشائها، سيُطلب من العملاء تأشير حقل I read & accept the terms & conditions (قرأت الشروط والأحكام وأوافق عليها) قبل أن يقوموا بإتمام عملية الدفع. ويمكنهم أيضًا الوصول إلى صفحة الشروط والأحكام من صفحة الدفع لكي يتمكّنوا من الاطلاع عليها: Checkout Endpoints في هذا القسم تتحّكم في endpoints الخاصة بإجراءات عملية الدفع. يمكن تعريف checkout endpoints بأنّها أجزاء إضافية تُلحق بعنوان URL صفحة الدفع لمعالجة إجراء محدّد أثناء عملية الدفع. يمكنك إدخال endpoint لإجراء الدفع Pay، الطلبات المستلمة Order Received وطريقة إضافة المدفوعات Add Payment Method: إذا كنت تريد إنشاء endpoints مخصصة، تأكّد من كونها فريدة، ولا تُستخدم في صفحة أخرى على الموقع، وإلّا ستواجه مشاكل في عملية الدفع. بوابات الدفع Checkout Gateways يغطّي هذا القسم بوابات الدفع التي تملكها على متجرك. يتضمّن WooCommerce خمس بوابات أساسية، ثلاث منها offline، والذي يعني أنّ الدفع لا يتم عبر الإنترنت؛ وهي BACS (تحويل مصرفي مباشر)، Cheque (الصكوك)، و Cash on Delivery (الدفع نقدًا عند التسليم). والبوابتان المتبقيتان هي online، والذي يعني أنّ الدفع يتم عبر الإنترنت؛ وهي PayPal و Simplify Commerce (الدفع باستخدام بطاقة ائتمانية): ملاحظة: الدفع بواسطة البطاقات الائتمانية Credit Card متاح فقط في الولايات المتحدة، المملكة المتحدة، وكندا. لذلك لا يظهر هذا الخيار في صفحة الدفع للمتاجر التي تم تحديد موقعها غير المواقع المذكورة. من هذا القسم يمكنك إعادة ترتيب بوابات الدفع لمتجرك، معرفة رمزها التعريفي ID، ومعرفة البوابات المفعّلة في لمحة واحدة. يمكنك ترتيب البوابات بالنقر على أيقونة التطابق (≡) بجانب اسم البوابة والسحب ثم الإفلات عند الترتيب المرغوب. ستكون البوابة التي تضعها في الترتيب الأول هي الخيار الافتراضي للدفع، إذا كانت مفعّلة، عندما يقوم العميل بالدفع: يمكنك الانتقال إلى إعدادات بوابة محددة إما بالنقر على اسم البوابة من القائمة، أو اذهب إلى أعلى الصفحة وانقر على التبويب الفرعي الخاص بتلك البوابة. وسنغطّي إعدادات كل بوابة على حِدة في الفقرات التالية: خيارات استلام المدفوعات عبر التحويل المصرفي المباشر BACS تحت تبويب Checkout الرئيسي انقر على التبويب الفرعي BACS: قم بتأشير الخيار الأول Enable Bank Transfer لإتاحة للعميل إمكانية الدفع بواسطة التحويل المصرفي. وإذا قمت بتفعيله تأكّد من إدخال عنوان مناسب في حقل Title، وصف مختصر في حقل Description، بالإضافة إلى التعليمات Instruction عند الحاجة. سيظهر العنوان لعملائك على صفحة الدفع، وعند النقر عليه سيظهر الوصف تحته: أما التعليمات فستظهر على صفحة استلام الطلب، وستُرسل بواسطة البريد الإلكتروني: في قسم تفاصيل الحساب Account Details قم بإدخال اسم الحساب Account Name، رقم الحساب Account Number، اسم المصرف Bank name، الرقم التعريفي للمصرف أو فرعه Sort Code، رقم الحساب المصرفي الدولي IBAN، ورمز تعريف المصرف BIC/Swift. قم بإدخال هذه المعلومات لكل حساب مصرفي تستقبل عن طريقه المدفوعات. يجب أن تلاحظ أنّ هذه البوابة لا تقوم بمعالجة عملية الدفع بصورة تلقائية. فهي تتطلّب أن تقوم بالتحقق من المدفوعات والموافقة عليها من داخل الحساب المصرفي الذي قمت بتحديده لاستقبال المدفوعات. ومن ثم تقوم بإدارة الطلبات وحالتها (جارية، مكتملة، ملغية...إلخ) يدويًا. بعد الانتهاء تأكد من حفظ التغييرات بالنقر على Save Changes. وبهذا قد أصبحت جاهزًا لاستقبال حوالات مصرفية من عملائك. خيارات استلام المدفوعات عبر الصكوك Cheques تحت تبويب Checkout الرئيسي انقر على التبويب الفرعي Cheque: قم بتأشير الخيار الأول، Enable Cheque Payment، إذا كنت تريد تمكين العميل من الدفع بواسطة صك. كما أنّ هذا الخيار يسهّل عليك تقديم طلبات تجريبية لاختبار أشياء مثل رسائل البريد الإلكتروني أو صفحات نجاح الطلب. إذا قمت بتفعيل هذا الخيار تأكّد من إضافة عنوان في حقل Title ووصف مختصر في حقل Description. في حقل التعليمات Instructions أدخل عنوان متجرك (أو العنوان الذي تريد أن يتم إرسال الصك إليه) وأية إرشادات أخرى. سيظهر عنوان طريقة الدفع هذه للعميل على صفحة الدفع، وعند النقر عليه سيظهر الوصف تحته: أما التعليمات فستظهر على صفحة استلام الطلب، وستُرسل بواسطة البريد الإلكتروني. وكما هو الحال في البوابة السابقة، هذه البوابة لا تعالج عملية الدفع تلقائيًا. وستتمّكن من استلام الصكوك وسحب المدفوعات نقدًا بنجاح حسب المعلومات التي قمت بإدخالها في حقل التعليمات. لكي تقوم باستلام المدفوعات بنجاح، ننصحك أن تقوم بصرف الصكوك قبل الشحن، فبهذه الطريقة ستضمن الدفع مقابل الطلب. وكذلك سيتوجّب عليك، عند تفعيل هذه البوابة، أن تقوم بإدارة الطلبات يدويًا. احفظ التغييرات بالنقر على Save Changes. خيارات استلام المدفوعات نقدا عند التسليم Cash on Delivery تحت تبويب Checkout الرئيسي انقر على التبويب الفرعي Cash on Delivery: قم بتأشير الخيار الأول، Enable Cash on Delivery، لتمكين العميل من الدفع عن تسليم الطلب. وهذا الخيار أيضًا يسهّل عليك تقديم طلبات تجريبية لاختبار أشياء مثل رسائل البريد الإلكتروني أو صفحات نجاح الطلب. إذا قمت بتفعيل هذا الخيار تأكّد من إدخال عنوان مناسب في حقل Title، وصف مختصر في حقل Description، بالإضافة إلى التعليمات Instruction عند الحاجة. سيظهر العنوان للعميل على صفحة الدفع، وعند النقر عليه سيظهر الوصف تحته. أما التعليمات فستظهر على صفحة استلام الطلب، وستُرسل بواسطة البريد الإلكتروني: بإمكانك أيضًا تفعيل هذه البوابة لطرق شحن محددة تقوم بإعدادها من خلال تبويب Shipping (أي يكون استلام المدفوعات نقدًا عند التسليم مقتصرًا على طرق الشحن التي تحددها من قائمة Enable for shipping methods): وكذلك بإمكانك تفعيل هذه البوابة للطلبات الافتراضية/القابلة للتنزيل بتأشير الخيار Accept for virtual orders. هذه البوابة كسابقاتها لا تعالج عملية الدفع تلقائيًا، ولذلك يتطلّب منك تأكيد إتمام عملية الدفع بالطريقة التي تراها مناسبة، ومن ثم إدارة حالة الطلب يدويًا في WooCommerce. احفظ التغييرات بالنقر على Save Changes قبل الانتقال إلى التبويب الفرعي التالي. خيارات استلام المدفوعات عبر PayPal يعتبر باي بال خيار الدفع الأكثر شعبية لأنّه يوفّر أمان تام فيما يتعلّق بالمعاملات المالية. انقر على التبويب الفرعي PayPal تحت التبويب الرئيسي Checkout. تتضمّن خيارات هذه البوابة عدة أقسام: PayPal قم بتأشير الخيار الأول، Enable PayPal standard، لاستقبال المدفوعات عبر باي بال، ثم قم بإدخال عنوان للبوابة في حقل Title، ووصف مختصر في حقل Description. في حقل PayPal Email، وهو الخيار الأهم في هذا القسم، تأكّد من إدخال عنوان البريد الإلكتروني الذي قمت بإعداده لاستقبال المدفوعات في حسابك على باي بال، وإلّا لن تذهب المدفوعات إلى الحساب الصحيح. قم بتأشير الخيار Enable PayPal Sandbox لكي تتمكّن من اختبار المدفوعات على موقعك أثناء مرحلة التطوير قبل أن تقوم بإطلاقه وطلب الأموال مقابل الطلبات. يتطلّب هذا الخيار التسجيل للحصول على حساب مطوّر developer account بالنقر على رابط here الموجود أسفل الخيار. قم بتأشير الخيار Enable Logging للسماح لباي بال بتسجيل جميع الأحداث في ملف محدد على خادومك، وهذا الأمر مفيد لمعالجة المشاكل التي قد تواجهك. خيارات متقدمة Advanced options يحتوي هذا القسم على بعض الخيارات المفيدة التي يمكنك استخدامها عند الحاجة: في حقل Receiver Email تستطيع إدخال عنوان بريد إلكتروني آخر والذي يمكن استلام المدفوعات عليه إذا كان عنوان البريد الإلكتروني الذي قمت بإدخاله سابقًا (في حقل PayPal Email) ليس هو العنوان الرئيسي لاستلام المدفوعات. انتبه فقط إلى أنّ العنوان الذي تقوم بإدخال في حقل Receiver Email سيُستخدم للتحقق من طلبات (IPN (Instant Payment Notification بدلًا من العنوان الأصلي في حقل PayPal Email. إذا كانت لديك مشاكل تتعلّق بإشعار الدفع الفوري IPN، بإمكانك استخدام حقل PayPal Identity Token. ويتطلّب ذلك تفعيل خيار Payment Data Transfer في حسابك على PayPal. سجّل الدخول إلى حسابك على PayPal ثم اذهب إلى: Settings > Website Payment Preferences قم بتفعيل Payment Data Transfer قم انسخ الرمز من حقل Identity Token: الصق الرمز في حقل PayPal Identity Token على WooCommerce. في حقل Invoice Prefix قم بإدخال رمز بادئ فريد خاص بموقعك. هذا الخيار مفيد وضروري إذا كانت لديك العديد من المتاجر التي تستخدم نفس حساب PayPal لاستقبال المدفوعات. في هذه الحالة تأكّد من إدخال الرمز البادئ لأنّ باي بال لا يسمح بالطلبات التي تحمل نفس رقم الفاتورة. يمكنك تجنّب هذه المشكلة باستخدام بادئة فريدة لفواتير كل متجر. إذا كنت تستخدم باي بال لمساعدتك في إنشاء ملصقات الشحن، سيفيدك الخيار Send shipping details to PayPal instead of billing والذي عند تفعيله سيقوم WooCommerce بإرسال عنوان الشحن الخاص بالعميل إلى باي بال بدلًا من إرسال الفواتير. بالرغم من أننا نوصي بإبقاء الخيار Address Override غير مفعّل، إلا أنّه خيار مُتاح لك إذا كنت ترغب في منع تغيير معلومات عناوين العملاء بين موقعك وباي بال. وبما أنّ باي بال يقوم بالتحقق من العناوين، يمكن أن يسبب هذا الخيار المشاكل بين موقعك وباي بال، لذلك من الأفضل عدم تفعيله. من قائمة Payment Action تحدد فيما إذا كنت تريد تقييد المدفوعات لحساب باي بال على الفور باختيار Capture، أو الحصول على موافقة يدوية أولًا بتحديد الخيار Authorize. أما خيار Page Style فهو اختياري ومنه يمكنك إدخال اسم لنمط الصفحة التي تقوم بإعدادها من حسابك على باي بال، مما يتيح لك المزيد من التحكّم في مظهر الصفحة التي يوجَّه إليها العملاء لإنهاء الطلب. توجد على باي بال مختلف أنماط الصفحات المعرّفة التي تجدها على حسابك. ألق نظرة عليها وادخل اسم النمط المرغوب في الحقل المذكور. API Credentials هذه الإعدادات مهمة لمعالجة عملية استرداد الأموال عبر باي بال. انقر على رابط here في وصف الإعدادات للعثور على اسم مستخدم API، الكلمة السرّية Password والتوقيع Signature الخاصة بحسابك على موقع باي بال: انسخ هذه البيانات وألصقها في حقولها المخصصة، ثم انقر على Save Changes لحفظ التغييرات. خيارات الدفع عبر البطاقة الائتمانية Simplify Commerce قبل أن نبدأ في ضبط الإعدادات، نودّ الإشارة إلى أنّ بوّابة Simplify Commerce (وهي التي تُستخدم لاستلام المدفوعات عبر البطاقة الائتمانية) لها بعض المتطلبات التقنية: استفسر من المضيف HOST فيما إذا كانت لخادومك دعم CURL، فهو يُستخدم للاتصال بواجهة برمجة التطبيق API لهذه البوابة. تأكّد من أنّ المضيف يستخدم إصدار PHP 5.3 أو الأحدث منه، وهذا من متطلبات استخدام حزمة أدوات تطوير البرمجيات SDK. تأكّد من استخدام إصدار WooCommerce 2.0 أو الأحدث منه. يوصى باستخدام شهادة SSL/HTTPS للحفاظ على بيانات العملاء مؤمّنة ومحمية. فهذه البوابة تتيح للعملاء إمكانية الدفع على الموقع مباشرة، لذلك اطلب من مضيفك المساعدة في تنصيب شهادة SSL. نأتي الآن إلى الإعدادات. تحتاج أولا إلى إنشاء حساب على موقع Simplify Commerce، وستجد رابط التسجيل في صفحة إعدادات بوابة Simplify Commerce. الآن انقر على تبويب Simplify Commerce الفرعي تحت تبويب Checkout الرئيسي: انقر على زر Sign up for Simplify Commerce لتبدأ بإنشاء الحساب. بعد إنشاء الحساب، قم بتأشير الخيار Enable Simplify Commerce لكي تتيح للعملاء إمكانية اختيار هذه الطريقة للدفع. ومن ثم قم بإضافة عنوان للبوابة في حقل Title ووصف في حقل Description: الخيار التالي هو أسلوب الدفع Payment Mode وهو الخاص بطريقة عرض البطاقة. بإمكانك اختيار أحد الخيارين، Standard أو Hosted Payments، إذا كانت لديك شهادة SSL مثبّتة. وبخلاف ذلك ليس لديك خيار سوى استخدام Hosted Payments. إذا كانت لديك شهادة SSL مثبّتة، سيُظهر أسلوب Standard نموذج بطاقة ائتمانية على صفحة الدفع، وسيستخدم أسلوب Hosted Payments مربّع حوار نموذجي لجمع معلومات الدفع. أما عند عدم تثبيت شهادة SSL، يجب أن تستخدم أسلوب Hosted Payments، وفي هذه الحالة سيتم توجيه العملاء إلى موقع Simplify Commerce حيث يمكنهم إدخال تفاصيل بطاقاتهم بأمان. لديك أيضًا إمكانية اختيار لون للنموذج من حقل Modal Color، وهذا فقط في حالة اختيار أسلوب Hosted Payments من قائمة Payment Mode. الخيار التالي هو Enable Sandbox Mode والذي عند تأشيره ستتُاح لك إمكانية اختبار الطلبات. لاحظ فقط أنّه عند تفعيل هذا الخيار لن تؤخذ أي مدفوعات حقيقية (كما قلنا هذا الخيار لأغراض الاختبار في مرحلة التطوير). بعد ذلك قم بإدخال رموز Sandbox Public Key و Sandbox Private Key (هذان الحقلان لا يظهران إلا عند تأشير الخيار Enable Sandbox Mode) والتي يمكنك الحصول عليها من حسابك على موقع Simplify Commerce: إذا لم تقم بتأشير الخيار Enable Sandbox Mode، ستتحول الحقول أعلاه إلى Public Key و Privet Key: هذه الحقول مهمة جدًا، تأكّد من إدخال الرموز التي تستطيع الوصول إليها من حسابك على Simplify Commerce. بعد الانتهاء انقر على Save Change لحفظ التغييرات. في النهاية، نود الإشارة إلى أنّه لا يُشترط استخدام جميع بوابات الدفع، قم بتفعيل البوابات التي تجدها مناسبة لمتجرك فقط. بهذه الخطوة نكون قد وصلنا إلى نهاية الدرس. لا تنس أن تتابع معنا الدرس القادم والذي سنغطّي فيه إعدادات الشحن Shipping.
  2. يتناول هذا المقال الأدوات الأساسية للتراجع عن التعديلات في Git. ينبغي دائما الحذر عند التعامل مع أوامر التراجع، إذ أن التراجع من الأمور القليلة في Git التي قد تجعلك تخسر العمل إن أجريتها بطريقة خاطئة. يكثر استخدام التراجع عند الإيداع قبل أن تكون جاهزا لذلك؛ مثلا بنسيان ملفات أو رسائل الإيداع. في هذه الحالة يمكنك إعادة الإيداع باستخدام الخيار amend--: git commit --amend يأخذ الأمر أعلاه محتويات منطقة الإدراج Staging area ويستخدمها في الإيداع. إن لم تحدث أية تغييرات منذ آخر عملية إيداع (عند تنفيذ الأمر مثلا مباشرة بعد تطبيق الإيداع السابق) فسيكون بإمكانك التعديل على رسالة الإيداع الأخيرة التي ستظهر في المحرّر. بهذه الطريقة تكون عدلت على رسالة الإيداع السابق دون أن تضيف إيداعا جديدا. بنفس الطريقة، تمكن إضافة ملف منسي إلى الإيداع. نفترض أنك مثلا بعد إرسال الإيداع فطنت إلى نسيان ملف باسم forgotten_file كان يجب أن يكون فيه؛ في هذه الحالة تستخدم نفس الأمر كما في المثال التالي: git commit -m 'initial commit' git add forgotten_file git commit --amend أرسلنا الإيداع في الأمر الأول، ثم أضفنا في الأمر الثاني ملفا جديدا إلى منطقة الإدراج واستخدمنا خيار amend-- مع git commit. نحصُل في النهاية على إيداع واحد يحل محل الأول ويوجد فيه الملف المنسي. التراجع عن إضافة الملفات إلى منطقة الإدراج سنتطرق في الفقرتين التاليتين إلى كيفية التراجع عن التعديلات على منطقة الإدراج ومجلد العمل. من الجميل أن الأمر الذي يريك حالة هاتين المنطقتين يذكرك بكيفية التراجع عن التعديلات عليهما. لنفترض مثلا أنك عدلت على ملفين وتريد إيداعهما منفصلين (إيداع لكل ملف)، ولكنك نفذت الأمر * git add بالخطأ، وأضفتهما في نفس الوقت إلى منطقة الإدراج. كيف يمكنك نزع الاثنين من منطقة الإدراج؟ أمر git status يذكرك بالكيفية: git add * git status On branch master Changes to be committed: (use "git reset HEAD <file>..." to unstage) renamed: README.md -> README modified: CONTRIBUTING.md مباشرة تحت عبارة Changes to be committed (التعديلات المهيّأة للإيداع) يوجد التذكير الذي يقول "استخدام reset HEAD... للتراجع عن إضافة ملف إلى منطقة الإدراج". إن قررنا اتباع النصيحة والتراجع عن إضافة ملف (وليكن CONTRIBUTING.md) إلى منطقة الإدراج: git reset HEAD CONTRIBUTING.md نحصل على الرسالة التالية: Unstaged changes after reset: M CONTRIBUTING.md وعند التحقق الآن من الحالة: git status نحصل على النتيجة التالية: On branch master Changes to be committed: (use "git reset HEAD <file>..." to unstage) renamed: README.md -> README Changes not staged for commit: (use "git add <file>..." to update what will be committed) (use "git checkout -- <file>..." to discard changes in working directory) modified: CONTRIBUTING.md عدلنا على الملف CONTRIBUTING.md إلا أنه الآن خارج منطقة الإدراج. ملحوظة: استخدام أمر git reset يمكن أن يكون خطرا عند استخدام الخيار hard-- إلا أنه ليس كذلك إن استخدم دون خيارات، في هذه الحالة يتعامل مع منطقة الإدراج فقط. التراجع عن تعديل ملفات ما ذا لو قررت أنك لا تريد الاحتفاظ بالتعديلات التي أجريتها على الملف CONTRIBUTING.md؟ كيف يمكن التراجع عن التعديلات بسهولة، إعادته إلى ما كان عليه قبل آخر إيداع مثلا؟ يخبرك أمر git status بكيفية ذلك، مثل ما فعل مع إضافة الملفات إلى منطقة الإدراج. في مخرجات المثال أعلاه تبدو منطقة الإدراج على النحو التالي: Changes not staged for commit: (use "git add <file>..." to update what will be committed) (use "git checkout -- <file>..." to discard changes in working directory) modified: CONTRIBUTING.md تخبرك الرسالة "..."use "git checkout" بكيفية إلغاء التعديلات على ملفات مجلد العمل. نطبق التعليمات: git checkout -- CONTRIBUTING.md ثم نتحقق من تأثير الأمر: git status On branch master Changes to be committed: (use "git reset HEAD <file>..." to unstage) renamed: README.md -> README تمكن ملاحظة أن التعديلات ألغيت. هام: من المهم فهمُ أن أمر git checkout خطير جدا. يلغي الأمر أي تعديل أجريته بلا رجعة، ولن يمكنك إعادته. استخدم هذا الأمر فقط عندما تكون متأكدا من أنك لم تعد ترغب في التعديلات. تذكر أن كل ما أودِع Commited في Git يمكن غالبا إرجاعه؛ حتى الإيداعات الموجودة على فروع Branches محذوفة أو تلك التي عدل عليها باستخدام خيار amend--. إلا أن البيانات التي لم تودع تُفقَد -على الأرجح- بغير رجعة. ترجمة -وبتصرّف- للفصل Git Basics - Undoing Things من كتاب Pro Git لصاحبه Scott Chacon.
  3. يدعم Git على غرار غالبية أنظمة إدارة النسخ التفريع Branching. يُقصَد بالتفريع الانتقال للعمل على خط تطوير مغاير لخط التطوير الرئيس والاستمرار في العمل على هذا الخط دون تداخل مع الخط الرئيس. يتطلّب التفريع في كثير من أنظمة إدارة النسخ إنشاء نسخة جديدة من مجلد الشفرة المصدرية، وهو أمر مكلّف ويأخذ الكثير من الوقت في المشاريع الكبيرة. أساسيات التفريع نحتاج لفهم آلية التفريع للعودة قليلا إلى الوراء ومراجعة الكيفية التي يخزّن بها Git بياناته. ذكرنا في درس مبادئ Git الأساسية أن البرنامج لا يخزّن البيانات على هيئة مجموعة فروق أو تغييرات؛ لكنه بدلا من ذلك يخزّن متتالية من اللقطات Snapshots. ما يحدُث عند إيداع البيانات هو أن Git يخزّن كائن إيداع Commit object يحوي مؤشرا على لقطة للمحتوى الذي أدرجته. يوجد بهذا الكائن أيضا اسمُ كاتب الإيداع Author وبريده الإلكتروني، الرسالة التي أضفتها مع الإيداع ومؤشرات Pointers على الإيداع أو الإيداعات التي تأتي مباشرة قبل الإيداع الذي يمثّله الكائن المذكور (الإيداع أو الإيداعات السابقة): لا سابق بالنسبة لأول إيداع، سابق واحد لإيداع عاديّ وإيداعات سابقة متعدّدة لإيداع ناتج عن دمج Merge تفريعين أو أكثر. سنفرض أن لدينا ثلاثة ملفات، أضفناها جميعا إلى منطقة الإدراج ثم نفّذنا أمر الإيداع. ينشئ الإدراج جمع تحقق Checksum لكلّ ملف، يخزّن نسخة الملف في مستودع Git (يسمّي Git هذه النسخ بالكتل Blobs) ثم يضيف جموع التحقق إلى منطقة الإدراج: git add README test.rb LICENSE git commit -m 'The initial commit of my project' ينشئ Git عند تنفيذ أمر commit جمع تحقق لكل مجلّد فرعي (المجلّد الجذر فقط في المثال الحالي) ويخزّن كائنات الشجرة في مستودع Git؛ ثم ينشئ بعد ذلك كائن إيداع لديه بيانات وصفية Metadata ومؤشرًا يحيل إلى شجرة جذر المشروع مما يسمح له بإنشاء لقطة من المجلد عند الحاجة. يحوي مستودع Git الآن خمسة كائنات: كتلة واحدة لمحتوى كلٍّ من الملفات الثلاثة، شجرة واحدة تسرُد لائحة بمحتوى المجلّد وتحدّد الكتل التي تخزِّن أسماء الملفات وكائن إيداع يوجد فيه مؤشر إلى جذر الشجرة إضافة لكلّ البيانات الوصفية الخاصة بالإيداع. شجرة البيانات الخاصة بالإيداع إن أجريت تعديلات ثم نفذت أمر commit من جديد فإن الإيداع الجديد سيخزّن مؤشرا على الإيداع الذي سبقه. إيداع والإيداعات السابقة عليه تفريع Git ليس سوى مؤشر على واحد من هذه الإيداعات؛ يتميز هذا المؤشر بكونه قابلا للنقل. يدعى التفريع المبدئي في Git بـmaster. ينشئ Git عند بدء الإيداعات تفريعا يؤشِّر على آخر إيداع؛ وفي كلّ مرة تضيف إيداعا جديدا ينتقل المؤشر تلقائيا إليه. ملحوظة: تفريع master ليس تفريعًا خاصًّا فهو مماثل لأي تفريع آخر في Git. يعود السبب في كون كلّ مستودعات Git تقريبا تحوي تفريعًا بهذا الاسم إلى أنّ أمر git init ينشئ مبدئيا تفريعا بهذا الاسم، والكثيرون لا يكلّفون أنفسهم عناء تغييره. تفريع وسجل الإيداعات الخاصة به إنشاء تفريع جديد في Git مالذي يحدث بالضبط عندما تنشئ تفريعا جديدا؟ يعني هذا أنك تنشئ مؤشرا جديدا للتنقل به. فلنفترض أننا أنشأنا تفريعا جديدا باسم testing باستخدام أمر git branch التالي: git branch testing ينشئ الأمر مؤشرا جديدا يحيل إلى نفس الإيداع الذي توجد عليه. أي أن لدينا مؤشرين يحيلان إلى نفس المتتالية من الإيداعات. تفريعان يشيران إلى نفس متتالية الإيداعات كيف يعرف Git التفريع الذي توجد عليه الآن؟ يحتفظ Git لهذا الغرض بمؤشر خاص يُسمّى HEAD (المقدّمة). ينبغي الانتباه إلى أن HEAD في Git مختلف تماما عنه في أنظمة إدارة نسخ أخرى مثل Subversion و CVS. يحيل HEAD إلى التفريع المحلي الذي تعمل عليه الآن. في المثال أعلاه فنحن لا زلنا على التفريع master حتى بعد إنشاء تفريع testing الجديد؛ فأمر git branch ينشئ تفريعا جديدا ولكنّه لا ينقُل إلى التفريع الجديد. مؤشر HEAD يشير إلى تفريع master تسهُل رؤية هذا الأمر بتنفيذ أمر git log الذي يعرض عند تحديد الخيار decorate-- الإيداعات التي تحيل إليها مؤشرات التفريعات: git log --oneline --decorate f30ab (HEAD -> master, testing) add feature #32 - ability to add new formats to the central interface 34ac2 Fixed bug #1328 - stack overflow under certain conditions 98ca9 The initial commit of my project يظهر اسما التفريعين master وtesting بجانب الإيداع f30ab. التبديل بين التفريعات يُستخدم أمر git checkout للانتقال إلى تفريع وبدء العمل عليه. ننفذ الأمر التالي للانتقال إلى التفريع testing الذي أنشأناه للتو: git checkout testing ينقل أمر git checkout أعلاه مؤشرَ HEAD إلى تفريع testing. يشير HEAD الآن إلى تفريع testing ما دلالة نقل مؤشّر HEAD؟ سنضيف إيداعا جديدا وسنرى: vim test.rb git commit -a -m 'made a change' يتقدم مؤشر HEAD إلى الإيداع الأخير في التفريع ينتقل مؤشر HEAD بتنفيذ الأمر commit. أي أن تفريع testing تقدم بإيداع بينما لا زال تفريع master على ما كان عليه عند تنفيذ أمر الانتقال git checkout. نعود إلى التفريع الرئيس master بتنفيذ الأمر التالي: git checkout master ينتقل مؤشر HEAD إلى التفريع الرئيس ينقل الأمر السابق مؤشر HEAD ليحيل إلى التفريع الرئيس ثم يرجع الملفات الموجودة في مجلد العمل إلى اللقطة التي يشير إليها التفريع master. يعني هذا أيضا أن التعديلات من الآن فصاعدا ستكون على نسخة قديمة من المشروع. يبدو الأمر كما لو أنك تراجعت عن التعديلات التي أجريتها بعد الانتقال إلى تفريع testing؛ وبدأت في تغييرات جديدة. ملحوظة: الانتقال إلى تفريع يغيّر ملفات مجلد العمل. ينبغي الانتباه إلى أن الانتقال إلى تفريع يؤدي إلى تغير الملفات الموجودة في مجلد العمل. إن انتقلت إلى تفريع قديم فسيعود محتوى مجلد العمل إلى ما كان عليه بعد آخر إيداع على هذا التفريع. إن لم يستطع Gitفعل ذلك فلن يسمح لك بتاتا بالانتقال إلى التفريع الجديد نعدّل على أحد الملفات ثم نضيف إيداعا جديدا: vim test.rb git commit -a -m 'made other changes' للتذكير نحن نعمل على التفريع master. بالإيداع أعلاه يبدأ سجلّ التفريعين بالتباعد كما هو موضح في الشكل أدناه. أنشأنا تفريعا جديدا وانتقلنا للعمل عليه، أجرينا بضعة تغييرات ثم عدنا من جديد للعمل على التفريع الرئيس. كل من هذه التغييرات معزول عن الآخر في تفريع مختلف: يمكن العمل على تفريع، ثم الانتقال إلى تفريع آخر والعمل عليه ثم العودة إلى التفريع الأول والعمل عليه أيضا؛ وعندما تكون جاهزا يمكن أن تدمج الاثنين. يؤدّى كل هذا العمل بسهولة بالأوامر checkout ،branch وcommit. تباعد التفريعات عن بعضها يمكن استخدام الأمر التالي لعرض سجل التغييرات على شكل مخطّط يوضّح إلى أين تحيل مؤشرات التفريعات وكيف تباعدت عن بعضها: git log --oneline --decorate --graph --all مثال على النتيجة: * c2b9e (HEAD, master) made other changes | * 87ab2 (testing) made a change |/ * f30ab add feature #32 - ability to add new formats to the * 34ac2 fixed bug #1328 - stack overflow under certain conditions * 98ca9 initial commit of my project يسهُل إنشاء تفريعات ومحوها في Git، إذ لا يتطلّب ذلك سوى إنشاء ملفّ من مجموع تحقق ذي 40 محرفا يمثّل الإيداع الذي يحيل إليه مؤشّر التفريع. يختلف Git عن نظم إدارة نسخ أخرى يتطلب التفريع فيها نسخ جميع ملفات المشروع إلى مجلد ثان ممّا يدوم ثواني عدّة وأحيانا دقائق حسب حجم المشروع؛ بينما يكاد يكون الأمر في Git لحظيا. زيادة على ذلك فإن تخزين سوابق الإيداع تجعل من العثور على قاعدة مناسبة لدمج تفريعين أسهل وفي كثير من الأحيان تلقائيا. تشجّع هذه الميزة التي سنتطرّق إليها في المقال التالي المطوّرين على إنشاء التفريعات واستخدامها أكثر. ترجمة -بتصرف- للفصل Git Branching - Branches in a Nutshell من كتاب Pro Git لصاحبه Scott Chacon.