دليل 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