Skip to content

adityakurnias/cRGit

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

11 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

cRGit

cRGit adalah sebuah sistem kontrol versi sederhana yang terinspirasi oleh Git dan ditulis dari awal menggunakan Ruby. Proyek ini dibuat untuk tujuan edukasi guna memahami cara kerja internal Git, mengikuti konsep dari seri Rebuilding Git in Ruby. https://thoughtbot.com/blog/rebuilding-git-in-ruby

Fitur

  • Inisialisasi repositori baru.
  • Menambahkan file ke staging area (indeks).
  • Melakukan commit untuk perubahan yang sudah di-stage.
  • Melihat status repositori.

Prasyarat

  • Ruby (dikembangkan dengan versi 3.x)

Instalasi

  1. Clone repositori ini:
    git clone <url-repositori-anda>
    cd cRGit
  2. Skrip dirancang untuk dijalankan secara langsung. Tidak ada langkah instalasi lebih lanjut yang diperlukan.

Penggunaan

chmod +x bin/*

Inisialisasi Repositori

Untuk membuat repositori cRGit baru di direktori saat ini, jalankan:

./bin/crgit.rb init

Perintah ini akan membuat direktori .crgit, tempat cRGit menyimpan semua datanya, termasuk objek dan referensi.

Menambahkan File

Untuk menyiapkan file (stage) untuk commit berikutnya, gunakan perintah add:

# Buat file baru
echo "hello world" > hello.txt

# Tambahkan ke indeks
./bin/crgit.rb add hello.txt

# Atau semua file di direktori
./bin/crgit.rb add .

Memeriksa Status

Untuk melihat file mana yang sudah di-stage dan apa commit saat ini, gunakan status:

./bin/crgit.rb status

Melakukan Commit

Untuk menyimpan perubahan yang sudah di-stage secara permanen, buat sebuah commit:

./bin/crgit.rb commit

Perintah ini akan membuka editor teks default Anda ($EDITOR, misal: vi atau nano) untuk menulis pesan commit. Setelah menyimpan dan menutup editor, sebuah objek commit baru akan dibuat.

Struktur Proyek

  • bin/: Berisi skrip yang dapat dieksekusi untuk setiap perintah.
  • lib/: Berisi kelas-kelas Ruby inti yang mengimplementasikan logika sistem kontrol versi.
    • crgit/object.rb: Menangani baca/tulis objek (blob, tree, commit).
    • crgit/index.rb: Mengelola staging area.
    • crgit/repo.rb: Mengelola struktur repositori dan referensi seperti HEAD.
    • crgit/commit.rb: Logika untuk membuat objek commit.
    • crgit/tree.rb: Logika untuk membuat objek tree dari indeks.

Cara Kerja

cRGit meniru model objek dasar Git:

  1. Blob: Saat Anda menjalankan add, konten file akan dikompresi, hash SHA-1-nya dihitung, dan disimpan sebagai objek "blob" di direktori .crgit/objects.
  2. Indeks: Perintah add juga mencatat path file dan hash SHA-1 blob-nya di dalam file .crgit/index. Ini berfungsi sebagai staging area.
  3. Tree: Saat Anda menjalankan commit, cRGit akan membangun objek "tree" dari indeks. Sebuah tree merepresentasikan isi sebuah direktori, memetakan nama file/direktori ke hash SHA blob/tree.
  4. Commit: Sebuah objek "commit" kemudian dibuat, yang menunjuk ke hash SHA dari root tree dan menyertakan metadata seperti penulis dan pesan commit.
  5. HEAD: Terakhir, referensi HEAD diperbarui untuk menunjuk ke hash SHA dari commit baru, menjadikannya sebagai ujung dari branch saat ini.

About

Gat Git Gut

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages