بدء استخدام Git يشبه زيارة بلد جديد لا تعرف لغته. في حين أنه من الواضح أين أنت وأين تذهب ، كل شيء على ما يرام ، ولكن إذا ضلت ، تبدأ مشاكل كبيرة.هناك الكثير من البرامج التعليمية حول أوامر Git المنشورة على الإنترنت ، ولكن في هذه المقالة ، يتم فحص عمل Git بعمق أكثر من مجرد تعلم الأوامر.هذا هو الجزء الأول من دليل Git من مدونة Pierre de Wulf التي ترجمها فريق Mail.ru Cloud Solutions . يجد المستخدمون الجدد صعوبة في الارتياح مع Git. هذه أداة قوية ، ولكن للأسف ، ليس من السهل جدًا تعلمها. هناك الكثير من المفاهيم الجديدة والأوامر التي تؤدي إجراءات مختلفة ، إذا تم تمرير الملف كمعلمة أم لا ، فإن التعليقات غير الواضحة ...ربما الطريقة الوحيدة للتغلب على كل هذه الصعوبات هي تعلم أكثر قليلاً من مجرد git الالتزام / الدفع ، لفهم كيفية عمل Git.مجلد .Git
عندما تقوم بإنشاء مستودع جديد باستخدام الأمر git init ، يقوم Git بإنشاء مجلد سحري ، .git. يحتوي على كل ما تحتاجه لكي يعمل Git. إذا كنت تريد إزالة Git من مشروعك ، مع ترك ملفات المشروع على القرص ، فما عليك سوى حذف المجلد .git. على الرغم من قد يحتاج هذا؟ ├── HEAD
├── branches
├── config
├── description
├── hooks
│ ├── pre-commit.sample
│ ├── pre-push.sample
│ └── ...
├── info
│ └── exclude
├── objects
│ ├── info
│ └── pack
└── refs
├── heads
└── tags
فيما يلي محتويات المجلد .git النموذجي قبل الالتزام الأول:- رئيس - سننظر في هذا لاحقًا.
- config — , , , url , , email . git config, .
- description — gitweb .
- hooks — , Git. , , / commit/rebase/pull… . push .
- المعلومات - استبعاد - يتم وصف الملفات التي لا تريد تضمينها في المستودع هنا. وظيفة هذا الملف هي نفس وظيفة ملف .gitignore ، باستثناء أنه لا يتم نقله إلى المستودع. عمليًا ، عادةً ما يكون .gitignore كافيًا لجميع المهام.
ماذا يوجد داخل الالتزام؟
في كل مرة تقوم فيها بإنشاء ملف وتنفيذ التغييرات ، يقوم Git بأرشفة الملف وتخزينه في بنية البيانات الخاصة به. يتم إنشاء كائن مؤرشف باسم فريد ويتم تخزينه في مجلد الكائنات.قبل فحص مجلد الكائن ، دعنا نوضح ما هو الالتزام. التنفيذ هو كتلة من الحالة الحالية للملفات في مجلد عمل ، ولكن ليس ذلك فقط.في الواقع ، عندما تقوم بإجراء تغييرات ، يقوم Git بأمرين فقط:- إذا لم يتغير الملف في مجلد العمل ، فإنه ببساطة يضيف اسم الملف المضغوط (التجزئة) إلى اللقطة.
- إذا تم تغيير الملف في مجلد العمل ، فإنه يضغطه ، ويضعه في مجلد الكائنات ويضيف اسم الملف المضغوط (التجزئة) إلى اللقطة.
بالطبع ، يتم وصف كل شيء هنا بطريقة مبسطة إلى حد ما ، ومع ذلك ، هذا يكفي لفهم العمليات الجارية.بمجرد أخذ لقطة ، يتم أرشفتها وتسميتها بعلامة تجزئة ، ثم وضعها في مجلد الكائنات.├── 4c
│ └── f44f1e3fe4fb7f8aa42138c324f63f5ac85828 // hash
├── 86
│ └── 550c31847e518e1927f95991c949fc14efc711 // hash
├── e6
│ └── 9de29bb2d1d6434b8b29ae775ad8c2e48c5391 // hash
├── info // let's ignore that
└── pack // let's ignore that too
هذا ما يبدو عليه مجلد الكائنات بعد أن قمت بإنشاء file_1.txt والتزمت به. يرجى ملاحظة أنه إذا بدأ تجزئة ملفك بـ "4cf44f1e ..." ، فسيحفظه Git باسم "f44f1e ..." في مجلد فرعي باسم "4c". وبالتالي ، سيتم وضع الملفات في 256 مجلدًا فرعيًا ولن يحتوي كل منها على عدد كبير جدًا من الملفات.كما ترون ، لدينا ثلاث تجزئات. واحد لملف file_1.txt ، والثاني للقطات التي تم التقاطها عند التنفيذ. ما هو الهدف الثالث؟ يتم إنشاء التجزئة الثالثة لأن الالتزام هو أيضًا كائن ، كما يتم أرشفته ووضعه في مجلد الكائنات.عليك أن تتذكر أن الالتزام يتكون من أربعة أشياء:- اسم (لقطة) لقطة دليل العمل.
- تعليق.
- معلومات حول من قام بتنفيذ الإلتزام.
- تجزئة الوالد ترتكب.
انظر بنفسك ما يحدث إذا قمت بفك ضغط ملف الالتزام:git cat-file -p 4cf44f1e3fe4fb7f8aa42138c324f63f5ac85828
وهذا ما ستراه:tree 86550c31847e518e1927f95991c949fc14efc711
author Pierre De Wulf
<test[@gmail.com](mailto:pierredewulf31@gmail.com)> 1455775173 -0500
committer Pierre De Wulf
<[test@gmail.com](mailto:pierredewulf31@gmail.com)> 1455775173 -0500
commit A
ترى ، كما هو متوقع ، تجزئة اللقطة والمؤلف وتعليق الالتزام. شيئان مهمان هنا:- تجزئة لقطة "86550 ..." هي أيضًا كائن ويمكن رؤيتها في مجلد الكائنات.
- نظرًا لأن هذا هو أول التزام ، فإنه ليس لديه التزام رئيسي.
ما هو حقا في الصورة؟git cat-file -p 86550c31847e518e1927f95991c949fc14efc711
100644 blob e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 file_1.txt
هنا نرى الكائن الذي كان في تخزيننا للكائنات ، الكائن الوحيد في صورتنا.الفرع ، العلامات ، الرأس واحد
الآن أنت تفهم أن كل شيء في Git يمكن الحصول عليه من خلال التجزئة الصحيحة. دعونا نلقي نظرة على HEAD الآن. فماذا هناك؟cat HEAD
ref: refs/heads/master
لا يوجد تجزئة ، وهذا منطقي ، لأن HEAD هو مؤشر إلى أعلى الفرع الذي تعمل معه. إذا نظرت إلى ملف / رؤساء / سيد الملف ، سترى:cat refs/heads/master
4cf44f1e3fe4fb7f8aa42138c324f63f5ac85828
يبدو مألوفا؟ وبطبيعة الحال ، إنها تجزئة الأولى! يوضح هذا أن العلامات والفروع هي مجرد مؤشرات على الالتزام. من خلال فهم ذلك ، يمكنك حذف جميع العلامات التي تريدها ، وجميع الفروع التي تريدها ، وسيظل الالتزام الذي أشاروا إليه في مكانه. الشيء الوحيد ، سيكون من الصعب الوصول إليه. إذا كنت تريد معرفة المزيد عن هذا ، راجع كتاب git .التعليق الأخير
بعد قراءته ، يجب أن يتضح لك أن كل ما يفعله Git هو أرشفة مجلد العمل ووضعه في مجلد الكائنات مع بعض المعلومات الإضافية. إذا كنت على دراية كافية بـ Git ، فأنت تتمتع بالتحكم الكامل في الملفات التي سيتم تضمينها في الالتزام والملفات التي لن يتم تضمينها.أعتقد أن التنفيذ ليس لقطة لمجلد العمل ، بل لقطة للملفات التي تريد تنفيذها. وأين يخزن Git قائمة الملفات التي تريد تنفيذها؟ يحفظ هذه القائمة في ملف فهرس. لن نتعمق في هذه المشكلة ، إذا كنت مهتمًا ، يمكنك العثور على مزيد من التفاصيل هنا .تمت الترجمة بدعم من Mail.ru Cloud Cloud Solutions .ماذا تقرأ :- طرق التخزين المؤقت البسيطة في GitLab CI: دليل صور .
- -Agile .
- .