توطئة
تمهيد المترجم
كتاب احترف جت من «أمهات الكتب» في صناعة البرمجيات. فهو يعّلم نظامًا من أشهر أنظمة إدارة النسخ على الإطلاق، هو جت، ويعلّم فن التطوير باستخدام نظام إدارة نسخ موزع. فليس يقتصر نفعه على من يريد استخدام Git و GitHub، بل يمتد إلى من أراد استخدام GitLab أو حتى نظام آخر مثل Mercurial.
دراسة هذا الكتاب ضرورية لأي مبرمج.
وقد حرصت على تقليل الإنجليزية في الكتاب، إلا مما يلزم (مثل الأوامر ونواتجها) فترجمت ما نحتاجه منها مع إبقاء أصله كله، حتى يفهم الكتاب العامة والخاصة فلا نجعل إتقان الإنجليزية شرطًا لفهم كتاب عربي. على أن معرفة الإنجليزية ضرورة للمبرمجين ولمستخدمي جت لا محالة.
ودراسة العلم بلغة الإنسان الأولى تساعده على الفهم العميق لما يتعلم. ولا سبيل للنهضة إلا بنقل العلوم واستيعابها بلغتنا.
ولا يعني هذا إهمال اللغات الأجنبية؛ فتعلمها ضرورة.
أما عن الألفاظ: فلغة أي فن من الفنون هي دائما غريبة على مسامع من لم يعتادوها. حتى الإنجليزية؛ اسأل شخصا وُلد وعاش وشاخ في بلد يتحدث هذه اللغة، ولم يسمع أو يقرأ في حياته بأي لغة أخرى، عن عبارات مثل “fork a process” أو “clone a repository”…
والأمثلة على ذلك كثيرة، منها: «لا يدخل الزحاف في شيء من الأوتاد، وإنما يدخل في الأسباب خاصةً.» وهذا من كتاب في علم العَروض. والذي أتى بمصطلحاته، مثل الأسباب والأوتاد والزحاف، هو الخليل ابن أحمد، واضع أسس علم النحو، وجامع معجم العين، أول معجم عربي.
ومن درس علم التجويد سيجد أن كل لفظ يُعرَّف أولا بمعناه في اللغة ثم بمعناه في علم التجويد، فيقولون مثلا «الإخفاء لغةً هو…، واصطلاحًا هو…».
فلكل علم لغته الخاصة داخل اللغة العامة. ومثال آخر على ذلك لغة الحساب الحديث، ففيها الاسم «زائد» يُستعمل حرف عطف، والفعل المنصرف «يساوي» يُستعمل جامدًا ولا ينصرف أبدا، فنقول «اثنين زائد ثلاثة يساوي خمسة». فهل هذه الجملة ليست عربية؟
ولن يجد العربي غير المتخصص عبارة مثل «استنسخ مستودعًا» أو «أودِع التعديلات المؤهلة» أغرب مما يجد الإنجليزي غير المتخصص عبارة مثل “clone a repository” أو “commit the staged changes”. فكل فن له لغته الخاصة داخل اللغة العامة.
ولسنا اليوم بصدد تغيير قواعد اللغة هنا كما فعل أهل الحساب، إنما نحتاج فقط إلى توسيع معاني بعض الكلمات كما فعل أهل التجويد. ولن نأتِ بمصطلحات كثيرة كما فعل الخليل رحمه الله في علمَي العَروض والقافية.
وأرجو من القارئ الكريم التماس العذر لي إن بدا مني خطأ، وأن ينبهني إليه على صفحة مسائل ترجمة الكتاب على جتهب.
تمهيد Scott Chacon
مرحبا بكم في الإصدارة الثانية من كتاب احترف جت. نُشرت الإصدارة الأولى منذ ما يزيد الآن على أربعة أعوام. وتغيّرت أمور كثيرة منذ ذلك الوقت، إلا أن الكثير من الأشياء المهمة لم تتغير. ومع أن أكثر الأوامر والمفاهيم الأساسية لا تزال سارية اليوم — لأن الفريق الأساسي القائم على جت يقوم بمجهود خيالي للحفاظ على التوافقية مع الإصدارات السابقة (backward compatibility) — فقد ظهرت بعض الإضافات والتغييرات البارزة في المجتمع الذي حول جت. المراد من الإصدارة الثانية من هذا الكتاب هو تناول تلك التغييرات، وتحديثه ليكون أكثر إفادةً للمستخدم الجديد.
عندما كتبت الإصدارة الأولى، كان جت صعب الاستخدام نسبيا، وبالكاد يستخدمه الخارقون (hackers) الأشداء. كان بدأ ينتشر في بعض المجتمعات، لكن لم تقترب حاله مما صار عليه اليوم من الوجود المطلق في كل مكان. ثم بدأت تستخدمه أكثر مجتمعات المصادر المفتوحة. ولقد تقدم جت تقدما مذهلا: في عمله على ويندوز، وفي انفجار أعداد الواجهات الرسومية له على جميع المنصات، وفي دعم بيئات التطوير له، وفي الاستخدام التجاري. وكتاب احترف جت الذي جاء منذ أربعة أعوام لم يكن يعلم شيئًا من هذا كله. فكان ذكر جميع تلك الآفاق الجديدة في مجتمع جت من أكبر همومنا في هذه الإصدارة الجديدة.
وأيضا تضاعف بسرعة مجتمع المصادر المفتوحة الذي يستخدم جت. فعندما جلست أول مرة أكتب هذا الكتاب منذ قرابة خمسة أعوام (فقد استغرق الأمر مني وقتا لإطلاق الإصدارة الأولى)، كنت وقتئذٍ قد بدأت العمل في شركة مغمورة جدا تطوّر موقع استضافة جت يسمى جِتهَب (GitHub). وعند نشره، لم يكن للموقع سوى نحو بضعة آلاف مستخدم، ولم نكن إلا أربعة موظفين نعمل عليه. وبينما أنا أكتب هذه المقدمة الآن، إذ أعلن جتهب استضافتنا للمشروع رقم عشرة ملايين، مع قرابة خمسة ملايين حساب مطوِّر مسجَّل، وأكثر من ٢٣٠ موظفًا. سواءً أحببت أم كرهت، لقد غيّر جتهب كثيرًا في جماعات ضخمة من مجتمع المصادر المفتوحة بطريقة لم يكد يتخيلها أحد عند كتابتي الإصدارة الأولى.
كتبت فصلا قصيرا في النسخة الأصلية من كتاب احترف جت عن جتهب ليكون مثالا لاستضافة جت، ولم أشعر قط بالارتياح الكامل إلى هذا الفصل؛ لم يعجبني أنني أكتب ما أشعر أنه في الأصل ذُخرا للمجتمع، ثم أتحدث فيه عن شركتي. ومع أني ما زلت لا أحب تضارب المصالح، فإن أهمية جتهب في مجتمع جت لا يمكن التغاضي عنها. وبدلا من كون هذا الجزء من الكتاب مثالا على استضافة جت، فقد قررت تحويله إلى شرح عميق لماهية جتهب وكيفية استخدامه بشكل فعّال. فإذا كنت تنوي تعلم استخدام جت، فستساعدك معرفة استخدام جتهب في المشاركة في مجتمع مترامي الأطراف، فهي قيّمة بغض النظر عن استضافة جت التي ستقرر استخدامها لمشاريعك البرمجية.
أما التغيير الكبير الآخر منذ النشر السابق فكان تطوير وبروغ بروتوكول HTTP لمعاملات جت الشبكية. فغيّرنا معظم أمثلة الكتاب من SSH إلى HTTP لأنه أسهل كثيرا.
لقد كان مذهلا مشاهدة جت ينمو عبر الأعوام من نظام إدارة نسخ مغمور نسبيا إلى نظام إدارة النسخ المهيمن في المشروعات التجارية والمفتوحة. أنا سعيد بكون كتاب احترف جت قد أبلى بلاءً حسنًا وكان قادرًا أن يكون من الكتب التقنية، القليلة في السوق، الناجحة والمفتوحة بالكامل معًا.
أرجو أن تنتفع بهذه الإصدارة المحدثة من احترف جت.
تمهيد Ben Straub
الإصدارة الأولى من هذا الكتاب هي ما جعلني مولعا بـجت. كانت هي ما عرّفني أسلوب صناعة برمجيات وجدته طبيعيا أكثر من كل ما رأيت سابقًا. لقد كنت بالفعل مطوِّرا منذ عدة أعوام وقتئذٍ، لكن هذا كان المنعطف الصحيح الذي ساقني إلى طريق أمتع كثيرا من الطريق الذي كنت عليه.
واليوم وبعد أعوام، أنا مساهم في تطبيق جت رائد، وعملت في أكبر شركة استضافة جت، وطُفت العالم معلِّمًا الناس جت. وعندما سألني Scott إذا ما كنت أرغب في العمل على الإصدارة الثانية من الكتاب، لم أحتجْ حتى للتفكير.
لقد كان العمل على هذا الكتاب شرف عظيم وسعادة كبيرة لي. وأرجو أن يساعدك بقدر ما ساعدني.
إهداء
إلى زوجتي Becky، التي بغير وجودها لم تكن هذه المغامرة لتبدأ قَط. — Ben
أهدي هذه الإصدارة إلى فتياتي: إلى زوجتي Jessica التي ساندتني طوال السنين، وإلى ابنتي Josephine التي ستساندني عندما أكون شيخًا مسننًا لا يدرك ما يدور حوله. — Scott
الرخصة
هذا العمل متاح برخصة المشاع الإبداعي الإصدارة الثالثة غير الموطنة بشروط النسبة للمصنِّف والاستخدام غير التجاري والترخيص بالمثل (CC BY-NC-SA 3.0 unported). لرؤية نسخة من هذه الرخصة، برجاء زيارة https://creativecommons.org/licenses/by-nc-sa/3.0/deed.ar أو إرسال بريد إلى
Creative Commons, PO Box 1866, Mountain View, CA 94042, USA.
مساهمات
لأن هذا الكتاب مفتوح المصدر، فقد تبرع لنا الناس بالعديد من التصحيحات وتعديلات المحتوى. إليكم جميع من ساهم في النسخة الإنجليزية من المشروع مفتوح المصدر Pro Git. شكرا لكم جميعا على مساعدتنا في جعل هذا الكتاب أفضل للناس جميعا.
المساهمون حتى الإيداع be823c3a
:
4wk- HairyFotr pedrorijo91
Adam Laflamme Hamid Nazari Pessimist
Adrien Ollier Hamidreza Mahdavipanah Peter Kokot
ajax333221 haripetrov peterwwillis
Akrom K Haruo Nakayama Petr Bodnar
Alan D. Salewski Helmut K. C. Tessarek Petr Janeček
Alba Mendez Hemant Kumar Meena Petr Kajzar
Aleh Suprunovich Hidde de Vries petsuter
Alexander Bezzubov HonkingGoose Philippe Blain
Alexandre Garnier Howard Philippe Miossec
alex-koziell i-give-up Phil Mitchell
Alex Povel Ignacy Pratik Nadagouda
Alfred Myers Igor Rafi
allen joslin Ilker Cat rahrah
Amanda Dillon iprok Raphael R
andreas Jan Groenewald Ray Chen
Andreas Bjørnestad Jaswinder Singh Rex Kerr
Andrei Dascalu Jean-Noël Avila Reza Ahmadi
Andrei Korshikov Jeroen Oortwijn Richard Hoyle
Andrew Layman Jim Hill Ricky Senft
Andrew MacFie jingsam Rintze M. Zelle
Andrew Metcalf jliljekrantz rmzelle
Andrew Murphy Joel Davies Rob Blanco
AndyGee Johannes Dewender Robert P. Goldman
AnneTheAgile Johannes Schindelin Robert P. J. Day
Anthony Loiseau johnhar Robert Theis
Antonello Piemonte John Lin Rohan D'Souza
Antonino Ingargiola Jonathan Roman Kosenko
Anton Trunov Jon Forrest Ronald Wampler
applecuckoo Jon Freed root
Ardavast Dayleryan Jordan Hayashi Rory
Artem Leshchev Joris Valette Rüdiger Herrmann
atalakam Josh Byster Sam Ford
Atul Varma Joshua Webb Sam Joseph
axmbo Junjie Yuan Sanders Kleinfeld
Bagas Sanjaya Junyeong Yim sanders@oreilly.com
Benjamin Dopplinger Justin Clift Sarah Schneider
Ben Sima Kaartic Sivaraam SATO Yusuke
Billy Griffin KatDwo Saurav Sachidanand
Bob Kline Katrin Leinweber Scott Bronson
Bohdan Pylypenko Kausar Mehmood Scott Jones
Borek Bernard Keith Hill Sean Head
Brett Cannon Kenneth Kin Lum Sean Jacobs
bripmccann Kenneth Lum Sebastian Krause
brotherben Klaus Frank Sergey Kuznetsov
Buzut Kristijan "Fremen" Velkovski Severino Lorilla Jr
Cadel Watson Krzysztof Szumny sharpiro
Carlos Martín Nieto Kyrylo Yatsenko Shengbin Meng
Carlos Tafur Lars Vogel Sherry Hietala
Chaitanya Gurrapu Laxman Shi Yan
Changwoo Park Lazar95 Siarhei Bobryk
Christian Decker leerg Siarhei Krukau
Christoph Bachhuber Leonard Laszlo Skyper
Christopher Wilson Linus Heckemann slavos1
Christoph Prokop Logan Hasson Smaug123
C Nguyen Louise Corrigan Snehal Shekatkar
CodingSpiderFox Luc Morin Solt Budavári
Cory Donnelly Lukas Röllin Song Li
Cullen Rhodes maks spacewander
Cyril Marat Radchenko Stephan van Maris
Damien Tournoud Marcin Sędłak-Jakubowski Steven Roddis
Daniele Tricoli Marie-Helene Burle Stuart P. Bentley
Daniel Hollas Marius Žilėnas SudarsanGP
Daniel Knittl-Frank Markus KARG Suhaib Mujahid
Daniel Shahaf Marti Bolivar Susan Stevens
Daniel Sturm Mashrur Mia (Sa'ad) Sven Selberg
Daniil Larionov Masood Fallahpoor td2014
Danny Lin Mathieu Dubreuilh Thanix
Dan Schmidt Matt Cooper Thomas Ackermann
Davide Angelocola Matthew Miner Thomas Hartmann
David Rogers Matthieu Moy Tiffany
delta4d Matt Trzcinski Tomas Fiers
Denis Savitskiy Mavaddat Javid Tomoki Aonuma
devwebcl Max Coplan Tom Schady
Dexter Máximo Cuadros Tvirus
Dexter Morganov Michael MacAskill twekberg
DiamondeX Michael Sheaver Tyler Cipriani
Dieter Ziller Michael Welch Ud Yzr
Dino Karic Michiel van der Wulp uerdogan
Dmitri Tikhonov Miguel Bernabeu UgmaDevelopment
Dmitriy Smirnov Mike Charles ugultopu
Doug Richardson Mike Pennisi un1versal
dualsky Mike Thibodeau Vadim Markovtsev
Duncan Dean Mikhail Menshikov Vangelis Katsikaros
Dustin Frank Mitsuru Kariya Vegar Vikan
Eden Hochbaum mmikeww Victor Ma
Ed Flanagan mosdalsvsocld Vipul Kumar
Eduard Bardají Puig nicktime Vitaly Kuznetsov
Eric Henziger Niels Widger Volker-Weissmann
evanderiel Niko Stotz Volker Weißmann
Explorare Nils Reuße Wesley Gonçalves
eyherabh Noelle Leigh William Gathoye
Ezra Buehler noureddin William Turrell
Fabien-jrt OliverSieweke Wlodek Bzyl
Fady Nagh Olleg Samoylov Xavier Bonaventura
Felix Nehrke Osman Khwaja xJom
Filip Kucharczyk Otto Kekäläinen xtreak
flip111 Owen yakirwin
flyingzumwalt Pablo Schläpfer Yann Soubeyrand
Fornost461 Pascal Berger Y. E
franjozen Pascal Borreli Your Name
Frank Patrice Krakow Yue Lin Ho
Frederico Mazzone patrick96 Yunhai Luo
Frej Drejhammar Patrick Steinhardt Yusuke SATO
goekboet paveljanik zwPapEr
grgbnc Pavel Janík ᐯᕮᒪᗝᑕᕮᒣ
Guthrie McAfee Armstrong Paweł Krupiński 狄卢