Git

Klon Dangkal dan Kedalaman Klon Git

Klon Dangkal dan Kedalaman Klon Git

Memahami Klon Dangkal dan Kedalaman Klon Git

Git adalah sistem kontrol versi terdistribusi. Itulah salah satu keuntungan menggunakan Git. Anda tidak harus bergantung pada server pusat atau repositori untuk bekerja secara lokal. Semua yang Anda butuhkan mengenai riwayat modul Anda ada di ujung jari Anda. Namun, ini bisa menjadi masalah ketika Anda berurusan dengan repositori dengan file biner besar atau repositori yang memiliki sejarah panjang. Terutama jika Anda memiliki situasi di mana Anda perlu mengunduhnya setiap saat, seperti server build, maka ukuran dan waktu pengunduhan dapat menjadi masalah.

Solusi Git untuk masalah ini adalah klon dangkal di mana Anda dapat menggunakan kedalaman klon untuk menentukan seberapa dalam klon Anda harus pergi. Misalnya, jika Anda menggunakan -depth 1, maka selama kloning, Git hanya akan mendapatkan salinan terbaru dari file yang relevan. Ini dapat menghemat banyak ruang dan waktu.

Klon dan Ukuran Git Dangkal

Mari kita lihat repositori Git populer untuk Django. Jika Anda mengkloning repo secara penuh, Anda mendapatkan yang berikut:

$ git klon https://github.com/django/django.git
Mengkloning ke 'django'…
jarak jauh: Menghitung objek: 409053, selesai.
jarak jauh: Mengompresi objek: 100% (26/26), selesai.
jarak jauh: Total 409053 (delta 6), digunakan kembali 8 (delta 1), paket digunakan kembali 409026
Menerima objek: 100% (409053/409053), 167.77 MiB | 5.95 MiB/s, selesai.
Menyelesaikan delta: 100% (297045/297045), selesai.
Memeriksa konektivitas… selesai.
Memeriksa file: 100% (5860/5860), selesai.

Sekarang jika Anda memeriksa ukuran salinan lokal Anda, itu adalah:

$ du -sh django/
225 juta    django/

Mari dapatkan repositori Django yang sama dengan klon dangkal:

$ git clone --kedalaman 1 https://github.com/django/django.git
Mengkloning ke 'django'…
jarak jauh: Menghitung objek: 8091, selesai.
jarak jauh: Mengompresi objek: 100% (4995/4995), selesai.
jarak jauh: Total 8091 (delta 2036), digunakan kembali 5507 (delta 1833), paket-digunakan kembali 0
Menerima objek: 100% (8091/8091), 8.82 MiB | 3.29 MiB/s, selesai.
Menyelesaikan delta: 100% (2036/2036), selesai.
Memeriksa konektivitas… selesai.
Memeriksa file: 100% (5860/5860), selesai.

Sekarang jika Anda memeriksa ukuran salinan lokal Anda, itu akan jauh lebih sedikit:

$ du -sh django/
55 juta       django/

Saat server Anda berurusan dengan ratusan lini produk, penghematan ruang hard disk semacam ini dapat membantu. Dalam kasus proyek game di mana ada binari yang berat, ini dapat memiliki efek dramatis. Ini juga membantu proyek lama. Misalnya, kloning repositori Linux lengkap dari GitHub lebih dari 7GB, tetapi Anda dapat mengkloningnya secara dangkal kurang dari 1GB.

Klon dan Sejarah Git Dangkal

Anda dapat memeriksa kloning dangkal secara lokal dengan repositori Anda sendiri. Mari buat file di repositori lokal kita, buat perubahan dan komit 10 kali. Dan kemudian kita dapat mengkloning repositori:

$ mkdir _contoh
$ cd _contoh
$ l
$ git init
Repositori Git kosong yang diinisialisasi di /Users/zakh/git_repo/_example/.git/
$ echo x > file_besar
$ git tambahkan -A
$ git commit -m "Komit awal"
[master (root-commit) dd11686] Komitmen awal
1 file diubah, 1 penyisipan (+)
buat mode 100644 file_besar
$ echo xx > file_besar
$ git tambahkan -A
$ git commit -m "Modifikasi ke file_besar 1"
[master 9efa367] Modifikasi ke large_file 1
1 file diubah, 1 penyisipan (+), 1 penghapusan (-)


$ mkdir tes
$cd tes
$ git clone file:////Users/zakh/git_repo/_example
Mengkloning ke '_example'…
jarak jauh: Menghitung objek: 33, selesai.
jarak jauh: Mengompresi objek: 100% (22/22), selesai.
jarak jauh: Total 33 (delta 10), digunakan kembali 0 (delta 0)
Menerima objek: 100% (33/33), 50.03 MiB | 42.10 MiB/s, selesai,.
Menyelesaikan delta: 100% (10/10), selesai.
Memeriksa konektivitas… selesai.

Dalam contoh ini, kami telah membuat repositori _example git di folder /Users/zakh/git_repo/ dengan satu file large_. Hanya dua komit pertama yang ditampilkan. Kemudian kami membuat klon lengkap dari repositori itu di lokasi yang berbeda.

Kemudian mari kita periksa riwayat komit kami:

$ git log --oneline
7fa451f Modifikasi ke large_file 10
648d8c9 Modifikasi ke large_file 9
772547a Modifikasi ke file_besar 8
13dd9ab Modifikasi ke large_file 7
5e73b67 Modifikasi ke large_file 6
030a6e7 Modifikasi ke large_file 5
1d14922 Modifikasi ke large_file 4
bc0f2c2 Modifikasi ke large_file 3
2794f11 Modifikasi ke large_file 2
d4374fb Modifikasi ke large_file 1
924829d Komitmen awal

Kami melihat semua komit di klon penuh.
Sekarang mari kita hapus salinan saat ini dan kemudian klon dangkal dengan kedalaman 1:

$ git clone --depth 1 file:////Users/zakh/git_repo/_example
Mengkloning ke '_example'…
jarak jauh: Menghitung objek: 3, selesai.
jarak jauh: Mengompresi objek: 100% (2/2), selesai.
jarak jauh: Total 3 (delta 0), digunakan kembali 0 (delta 0)
Menerima objek: 100% (3/3), 50.02 MiB | 65.12 MiB/s, selesai.
Memeriksa konektivitas… selesai.

Jika kita melihat histori sekarang, kita hanya melihat histori komit terakhir:

$ git log --oneline
7fa451f Modifikasi ke large_file 10

Mari mengkloning dangkal dengan kedalaman 3:

$ git clone --depth 3 file:////Users/zakh/git_repo/_example_
Mengkloning ke '_example'…
jarak jauh: Menghitung objek: 9, selesai.
jarak jauh: Mengompresi objek: 100% (6/6), selesai.
jarak jauh: Total 9 (delta 2), digunakan kembali 0 (delta 0)
Menerima objek: 100% (9/9), 50.02 MiB | 65.15 MiB/s, selesai,.
Menyelesaikan delta: 100% (2/2), selesai.
Memeriksa konektivitas… selesai.

Sekarang kita melihat lebih banyak komitmen:

$ git log --oneline
7fa451f Modifikasi ke large_file 10
648d8c9 Modifikasi ke large_file 9
772547a Modifikasi ke file_besar 8

Masalah dengan Git Shallow Clone

Pengguna harus memahami bahwa ukuran dan penghematan waktu pengunduhan bergantung pada organisasi komit. Mereka dapat secara signifikan berbeda dari satu repositori ke yang lain. Sebaiknya uji repositori dengan klon dangkal untuk memeriksa berapa banyak ruang hard disk dan waktu pengunduhan yang akan menghemat Anda.

Pertimbangan lain adalah bahwa meskipun Anda dapat mendorong kode dari klon dangkal, itu mungkin memakan waktu lebih lama karena perhitungan antara remote dan server lokal. Jadi jika Anda melakukan kode secara teratur dari salinan lokal, mungkin masuk akal untuk menggunakan klon lengkap.

Opsi Beberapa Cabang

Saat Anda menggunakan flag -depth dengan perintah clone, Git mengasumsikan flag -single-branch secara default. Tetapi Anda dapat menggunakan flag -no-single-branch untuk memberi tahu Git agar mendapatkan histori dari kedalaman yang ditentukan dari setiap cabang.

Berikut adalah cabang Django tanpa opsi -no-single-branch (kedalaman 1):

$ git cabang -a
* tuan
remote/asal/HEAD -> asal/master
remote/asal/master

Hanya cabang master yang hadir.

Berikut adalah cabang Django setelah menggunakan opsi -no-single-branch:

$ git clone --depth 1 --no-single-branch https://github.com/django/django.git
Mengkloning ke 'django'…
jarak jauh: Menghitung objek: 95072, selesai.
jarak jauh: Mengompresi objek: 100% (42524/42524), selesai.
jarak jauh: Total 95072 (delta 52343), digunakan kembali 82284 (delta 42389), paket digunakan kembali 0
Menerima objek: 100% (95072/95072), 74.69 MiB | 3.95 MiB/s, selesai.
Menyelesaikan delta: 100% (52343/52343), selesai.
Memeriksa konektivitas… selesai.
Memeriksa file: 100% (5860/5860), selesai.
$ du -sh django
124 juta        django

Perhatikan meskipun kedalamannya masih 1, ukuran klonnya adalah 124M, bukan 55M untuk kasus sebelumnya.
Jika kita memeriksa cabang, kita akan melihat lebih banyak cabang pada klon ini:

$cd django
$ git cabang -a
* tuan
remote/asal/HEAD -> asal/master
remote/asal/loteng/batu-oracle-sprint
remote/asal/loteng/sejarah lengkap
remote/asal/loteng/generik-auth
remote/asal/loteng/gis
remote/asal/loteng/i18n
remote/asal/loteng/penghapusan sihir
remote/asal/loteng/multi-auth
remote/asal/loteng/dukungan multi-db
remote/asal/loteng/admin baru
remote/asal/loteng/newforms-admin
remote/asal/loteng/per-objek-izin
remote/asal/loteng/queryset-refactor
remote/asal/loteng/skema-evolusi
remote/asal/loteng/skema-evolusi-ng
remote/asal/loteng/search-api
remote/asal/loteng/sqlalchemy
remote/asal/loteng/unicode
remote/asal/master
remote/asal/soc2009/admin-ui
remotes/Origin/soc2009/http-wsgi-improvements
remote/asal/soc2009/i18n-perbaikan
remote/asal/soc2009/validasi model
remote/asal/soc2009/multidb
remote/asal/soc2009/peningkatan tes
remote/asal/soc2010/pemuatan aplikasi
remote/asal/soc2010/query-refactor
remote/asal/soc2010/test-refactor
remote/asal/stabil/0.90.x
remote/asal/stabil/0.91.x
remote/asal/stabil/0.95.x
remote/asal/stabil/0.96.x
remote/asal/stabil/1.0.x
remote/asal/stabil/1.1.x
remote/asal/stabil/1.10.x
remote/asal/stabil/1.11.x
remote/asal/stabil/1.2.x
remote/asal/stabil/1.3.x
remote/asal/stabil/1.4.x
remote/asal/stabil/1.5.x
remote/asal/stabil/1.6.x
remote/asal/stabil/1.7.x
remote/asal/stabil/1.8.x
remote/asal/stabil/1.9.x
remote/asal/stabil/2.0.x

Ringkasan

Klon dangkal Git dapat membantu Anda menghemat waktu dan ruang hard disk. Tapi itu datang dengan harga. Jika Anda secara teratur mendorong kode ke repositori jarak jauh, itu akan meningkatkan waktu komit. Jadi, untuk alur kerja biasa, sebaiknya hindari klon dangkal.

Referensi:

Cara Mengubah Pengaturan Mouse dan Touchpad Menggunakan Xinput di Linux
Sebagian besar distribusi Linux dikirimkan dengan pustaka "libinput" secara default untuk menangani kejadian input pada sistem. Ini dapat memproses ke...
Petakan ulang tombol mouse Anda secara berbeda untuk perangkat lunak yang berbeda dengan Kontrol Tombol X-Mouse
Mungkin Anda membutuhkan alat yang dapat membuat kontrol mouse Anda berubah dengan setiap aplikasi yang Anda gunakan. Jika demikian, Anda dapat mencob...
Ulasan Mouse Nirkabel Microsoft Sculpt Touch
Saya baru-baru ini membaca tentang Microsoft Sculpt Touch mouse nirkabel dan memutuskan untuk membelinya. Setelah menggunakannya untuk sementara waktu...