دليل Git الجزء رقم 1: كل ما تحتاج لمعرفته حول دليل .git



بدء استخدام 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 النموذجي قبل الالتزام الأول:

  1. رئيس - سننظر في هذا لاحقًا.
  2. config — , , , url , , email . git config, .
  3. description — gitweb .
  4. hooks — , Git. , , / commit/rebase/pull… . push .
  5. المعلومات - استبعاد - يتم وصف الملفات التي لا تريد تضمينها في المستودع هنا. وظيفة هذا الملف هي نفس وظيفة ملف .gitignore ، باستثناء أنه لا يتم نقله إلى المستودع. عمليًا ، عادةً ما يكون .gitignore كافيًا لجميع المهام.

ماذا يوجد داخل الالتزام؟


في كل مرة تقوم فيها بإنشاء ملف وتنفيذ التغييرات ، يقوم Git بأرشفة الملف وتخزينه في بنية البيانات الخاصة به. يتم إنشاء كائن مؤرشف باسم فريد ويتم تخزينه في مجلد الكائنات.

قبل فحص مجلد الكائن ، دعنا نوضح ما هو الالتزام. التنفيذ هو كتلة من الحالة الحالية للملفات في مجلد عمل ، ولكن ليس ذلك فقط.

في الواقع ، عندما تقوم بإجراء تغييرات ، يقوم Git بأمرين فقط:

  1. إذا لم يتغير الملف في مجلد العمل ، فإنه ببساطة يضيف اسم الملف المضغوط (التجزئة) إلى اللقطة.
  2. إذا تم تغيير الملف في مجلد العمل ، فإنه يضغطه ، ويضعه في مجلد الكائنات ويضيف اسم الملف المضغوط (التجزئة) إلى اللقطة.

بالطبع ، يتم وصف كل شيء هنا بطريقة مبسطة إلى حد ما ، ومع ذلك ، هذا يكفي لفهم العمليات الجارية.

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

├── 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 ، والثاني للقطات التي تم التقاطها عند التنفيذ. ما هو الهدف الثالث؟ يتم إنشاء التجزئة الثالثة لأن الالتزام هو أيضًا كائن ، كما يتم أرشفته ووضعه في مجلد الكائنات.

عليك أن تتذكر أن الالتزام يتكون من أربعة أشياء:

  1. اسم (لقطة) لقطة دليل العمل.
  2. تعليق.
  3. معلومات حول من قام بتنفيذ الإلتزام.
  4. تجزئة الوالد ترتكب.

انظر بنفسك ما يحدث إذا قمت بفك ضغط ملف الالتزام:

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

ترى ، كما هو متوقع ، تجزئة اللقطة والمؤلف وتعليق الالتزام. شيئان مهمان هنا:

  1. تجزئة لقطة "86550 ..." هي أيضًا كائن ويمكن رؤيتها في مجلد الكائنات.
  2. نظرًا لأن هذا هو أول التزام ، فإنه ليس لديه التزام رئيسي.

ما هو حقا في الصورة؟

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 .

ماذا تقرأ :

  1. طرق التخزين المؤقت البسيطة في GitLab CI: دليل صور .
  2. -Agile .
  3. .


All Articles