Rumah  >  Artikel  >  hujung hadapan web  >  Mini-git, Memahami Bagaimana Fail Disimpan dalam Objek Git

Mini-git, Memahami Bagaimana Fail Disimpan dalam Objek Git

WBOY
WBOYasal
2024-08-22 18:45:03294semak imbas

Mini-git, Understanding How Files Are Stored in Git Objects

Semalam, saya berhasrat untuk melaksanakan salah satu fungsi teras Git sendiri—khususnya, cara fail disimpan, apakah objek Git dan proses pencincangan dan pemampatan. Saya mengambil masa 4 jam untuk membangun, dan dalam artikel ini, saya akan membimbing anda melalui proses pemikiran dan pendekatan saya.

Apa yang Berlaku Apabila Anda Komit Fail?

Apabila anda memasukkan fail dalam Git, beberapa langkah penting berlaku di bawah hud:

Pemampatan Fail:

Kandungan fail dimampatkan menggunakan algoritma zlib untuk mengurangkan saiznya. Kandungan termampat inilah yang disimpan dalam pangkalan data objek Git.

Pengiraan Hash:

Cincangan SHA-1 unik dijana daripada kandungan fail yang dimampatkan. Cincang ini berfungsi sebagai pengecam bagi fail dalam pangkalan data objek Git.

Menyimpan Objek:

Fail objek disimpan dalam direktori .mygit/objects, disusun oleh dua aksara pertama cincang. Struktur ini memudahkan untuk mengurus dan mendapatkan semula objek dengan cekap.
Mengemas kini Maklumat Komit:

Untuk menunjukkan cara fail disimpan dalam git.
Saya telah melaksanakan fungsi komit, mengambil satu fail untuk dipertimbangkan

  1. Untuk setiap fail, saya telah mengira cincang
  2. Di dalam folder objek, folder baharu dicipta dengan nama yang sama dengan dua aksara pertama cincang.
  3. Dan satu fail dibuat di dalam folder itu dengan baki cincangan sebagai nama.(fail ini menyimpan format mampat fail komited)
  4. Perubahan dikesan dengan membandingkan cincang yang baru dikira dan cincang yang dikira terakhir bagi fail

Mengesan Perubahan

Saya melaksanakan algoritma ini berdasarkan pendekatan saya sendiri, tetapi Git menggunakan algoritma yang lebih cekap untuk operasi ini.

  1. Mengekstrak pelbagai baris daripada OldContent dan newContent
  2. Mencipta Peta untuk menyimpan garisan sebagai kunci dan indeks sebagai nilai
  3. Mencipta dua tatasusunan baharu untuk menyimpan indeks baris biasa dalam oldContent dan newContent 4.cth: OldCommonarray = [0 , 3] maka baris yang dipadamkan ialah [1,2]

Repo GitHub
Linkedin

Terima kasih banyak atas masa anda.

Atas ialah kandungan terperinci Mini-git, Memahami Bagaimana Fail Disimpan dalam Objek Git. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn