Git

Git Shallow Clone dan Clone Depth

Git Shallow Clone dan Clone Depth

Memahami Git Shallow Clone dan Clone Depth

Git adalah sistem kawalan versi diedarkan. Itulah salah satu kelebihan menggunakan Git. Anda tidak perlu bergantung pada pelayan pusat atau repositori untuk bekerja secara tempatan. Semua yang anda perlukan mengenai sejarah modul anda berada di hujung jari anda. Walau bagaimanapun, Ia boleh menjadi masalah apabila anda berurusan dengan repositori dengan fail binari besar atau repositori yang mempunyai sejarah yang panjang. Terutama jika anda mempunyai situasi di mana anda perlu memuat turunnya segar setiap kali, seperti pelayan binaan, maka ukuran dan masa muat turun boleh menjadi masalah.

Penyelesaian Git untuk masalah ini adalah klon dangkal di mana anda dapat menggunakan kedalaman klon untuk menentukan seberapa dalam klon anda harus pergi. Contohnya, jika anda menggunakan -depth 1, maka semasa pengklonan, Git hanya akan mendapat salinan terbaru fail yang berkaitan. Ia dapat menjimatkan banyak ruang dan masa.

Klon dan Ukuran Git Cetek

Mari lihat repositori Git yang popular untuk Django. Sekiranya anda mengkloning repo sepenuhnya, anda mendapat perkara berikut:

$ git klon https: // github.com / django / django.git
Pengklonan menjadi 'django' ..
jauh: Membilang objek: 409053, selesai.
jauh: Memampatkan objek: 100% (26/26), selesai.
jauh: Jumlah 409053 (delta 6), digunakan semula 8 (delta 1), pek digunakan semula 409026
Menerima objek: 100% (409053/409053), 167.77 MiB | 5.95 MiB / s, selesai.
Menyelesaikan delta: 100% (297045/297045), selesai.
Memeriksa sambungan ... selesai.
Memeriksa fail: 100% (5860/5860), selesai.

Sekarang jika anda memeriksa ukuran salinan tempatan anda, ia adalah:

$ du -sh django /
225 juta django /

Mari dapatkan repositori Django yang sama dengan klon cetek:

$ git clone - kedalaman 1 https: // github.com / django / django.git
Pengklonan menjadi 'django' ..
jauh: Membilang objek: 8091, selesai.
jauh: Memampatkan objek: 100% (4995/4995), selesai.
jauh: Jumlah 8091 (delta 2036), digunakan kembali 5507 (delta 1833), pek digunakan semula 0
Menerima objek: 100% (8091/8091), 8.82 MiB | 3.29 MiB / s, selesai.
Menyelesaikan delta: 100% (2036/2036), selesai.
Memeriksa sambungan ... selesai.
Memeriksa fail: 100% (5860/5860), selesai.

Sekarang jika anda menyemak ukuran salinan tempatan anda, jumlahnya jauh lebih kecil:

$ du -sh django /
55 juta django /

Apabila pelayan anda berurusan dengan beratus-ratus barisan produk, penjimatan ruang cakera keras seperti ini dapat membantu. Dalam kes projek permainan di mana terdapat banyak binari, ini boleh memberi kesan dramatik. Ia juga membantu projek lama. Sebagai contoh, pengklonan repositori Linux penuh dari GitHub lebih daripada 7GB, tetapi anda boleh mengklonnya dengan cetek kurang dari 1GB.

Git Shallow Clone dan Sejarah

Anda boleh memeriksa pengklonan cetek secara tempatan dengan repositori anda sendiri. Mari buat fail di repositori tempatan kami, buat perubahan dan buat 10 kali. Dan kemudian kita dapat mengklon repositori:

$ mkdir _contohnya
$ cd _contohnya
$ ls
$ git init
Repositori Git kosong yang dimulakan di / Users / zakh / git_repo / _example /.git /
$ echo x> besar_file
$ git tambah -A
$ git commit -m "Komitmen awal"
[master (root-komit] dd11686] Komitmen awal
1 fail diubah, 1 sisipan (+)
buat mod 100644 large_file
$ echo xx> besar_file
$ git tambah -A
$ git commit -m "Pengubahsuaian ke large_file 1"
[master 9efa367] Pengubahsuaian ke large_file 1
1 fail diubah, 1 sisipan (+), 1 penghapusan (-)


ujian $ mkdir
ujian $ cd
Fail $ git clone: ​​//// Pengguna / zakh / git_repo / _contoh
Pengklonan menjadi '_contoh' ..
jauh: Membilang objek: 33, selesai.
jauh: Memampatkan objek: 100% (22/22), selesai.
jauh: Jumlah 33 (delta 10), digunakan semula 0 (delta 0)
Menerima objek: 100% (33/33), 50.03 MiB | 42.10 MiB / s, selesai.
Menyelesaikan delta: 100% (10/10), selesai.
Memeriksa sambungan ... selesai.

Dalam contoh ini, kami telah membuat _example git repository di folder / Users / zakh / git_repo / folder dengan single_file tunggal. Hanya dua komit pertama yang ditunjukkan. Kemudian kami membuat klon penuh repositori itu di lokasi yang berbeza.

Kemudian mari kita periksa sejarah komitmen kita:

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

Kami melihat semua komitmen dalam klon penuh.
Sekarang mari kita hapus salinan semasa dan kemudian klon cetek dengan kedalaman 1:

$ git clone --depth 1 file: //// Pengguna / zakh / git_repo / _contoh
Pengklonan menjadi '_contoh' ..
jauh: Membilang objek: 3, selesai.
jauh: Memampatkan objek: 100% (2/2), selesai.
jauh: Jumlah 3 (delta 0), digunakan semula 0 (delta 0)
Menerima objek: 100% (3/3), 50.02 MiB | 65.12 MiB / s, selesai.
Memeriksa sambungan ... selesai.

Sekiranya kita melihat sejarahnya sekarang, kita hanya melihat sejarah komitmen terakhir:

$ git log - talian
7fa451f Pengubahsuaian menjadi_file besar 10

Mari klon cetek dengan kedalaman 3:

$ git clone - fail kedalaman 3: //// Pengguna / zakh / git_repo / _contoh
Pengklonan menjadi '_contoh' ..
jauh: Membilang objek: 9, selesai.
jauh: Memampatkan objek: 100% (6/6), selesai.
jauh: Jumlah 9 (delta 2), digunakan semula 0 (delta 0)
Menerima objek: 100% (9/9), 50.02 MiB | 65.15 MiB / s, selesai.
Menyelesaikan delta: 100% (2/2), selesai.
Memeriksa sambungan ... selesai.

Sekarang kita melihat lebih banyak komitmen:

$ git log - talian
7fa451f Pengubahsuaian menjadi_file besar 10
648d8c9 Pengubahsuaian ke large_file 9
772547a Pengubahsuaian ke large_file 8

Masalah dengan Git Shallow Clone

Pengguna harus memahami bahawa penjimatan saiz dan muat turun bergantung pada organisasi yang melakukan. Mereka boleh berbeza antara satu repositori dengan yang lain. Adalah idea yang baik untuk menguji repositori dengan klon cetek untuk memeriksa berapa banyak ruang cakera keras dan masa muat turun yang akan menjimatkan anda.

Pertimbangan lain adalah bahawa walaupun anda dapat menekan kod dari klon dangkal, ia mungkin memerlukan masa lebih lama kerana pengiraan antara remote dan pelayan tempatan. Oleh itu, jika anda membuat kod secara berkala dari salinan tempatan, mungkin masuk akal untuk menggunakan klon penuh.

Pilihan Cawangan Pelbagai

Apabila anda menggunakan bendera -depth dengan perintah klon, Git menganggap bendera -single-branch secara lalai. Tetapi anda boleh menggunakan bendera -no-cabang tunggal untuk memberitahu Git untuk mendapatkan sejarah dari kedalaman yang ditentukan dari setiap cabang.

Berikut adalah cawangan Django tanpa pilihan -no-single-branch (kedalaman 1):

cawangan $ git -a
* tuan
remote / origin / HEAD -> asal / tuan
remote / asal / tuan

Hanya cawangan induk yang hadir.

Berikut adalah cawangan Django setelah menggunakan pilihan -no-single-branch:

$ git clone --depth 1 --no-single-branch https: // github.com / django / django.git
Pengklonan menjadi 'django' ..
jauh: Membilang objek: 95072, selesai.
jauh: Memampatkan objek: 100% (42524/42524), selesai.
jauh: Jumlah 95072 (delta 52343), digunakan semula 82284 (delta 42389), pek digunakan semula 0
Menerima objek: 100% (95072/95072), 74.69 MiB | 3.95 MiB / s, selesai.
Menyelesaikan delta: 100% (52343/52343), selesai.
Memeriksa sambungan ... selesai.
Memeriksa fail: 100% (5860/5860), selesai.
$ du -sh django
124 juta django

Perhatikan walaupun kedalaman masih 1, ukuran klon adalah 124M dan bukannya 55M untuk kes sebelumnya.
Sekiranya kita memeriksa cawangan, kita akan melihat lebih banyak cabang di klon ini:

$ cd django
cawangan $ git -a
* tuan
remote / origin / HEAD -> asal / tuan
remote / asal / loteng / batu-oracle-sprint
remote / asal / loteng / sejarah penuh
remote / asal / loteng / generik-auth
jarak jauh / asal / loteng / gis
jarak jauh / asal / loteng / i18n
remote / asal / loteng / penyingkiran sihir
jarak jauh / asal / loteng / multi-auth
alat kawalan jauh / asal / loteng / pelbagai-db-sokongan
remote / asal / loteng / pentadbir baru
remote / asal / loteng / newforms-admin
kebenaran jauh / asal / loteng / per-objek-kebenaran
alat kawalan jauh / asal / loteng / queryset-refactor
remote / asal / loteng / skema-evolusi
jarak jauh / asal / loteng / skema-evolusi-ng
alat kawalan jauh / asal / loteng / carian-api
jarak jauh / asal / loteng / sqlalchemy
alat kawalan jauh / asal / loteng / unicode
remote / asal / tuan
remote / asal / soc2009 / admin-ui
remote / asal / soc2009 / http-wsgi-penambahbaikan
jarak jauh / asal / soc2009 / i18n-penambahbaikan
remote / asal / soc2009 / pengesahan model
jarak jauh / asal / soc2009 / multidb
remote / asal / soc2009 / penambahbaikan ujian
remote / asal / soc2010 / memuatkan aplikasi
remote / origin / soc2010 / query-refactor
remote / origin / soc2010 / test-refactor
jarak jauh / asal / stabil / 0.90.x
jarak jauh / asal / stabil / 0.91.x
jarak jauh / asal / stabil / 0.95.x
jarak jauh / asal / stabil / 0.96.x
jarak jauh / asal / stabil / 1.0.x
jarak jauh / asal / stabil / 1.1.x
alat kawalan jauh / asal / stabil / 1.10.x
jarak jauh / asal / stabil / 1.11.x
alat kawalan jauh / asal / stabil / 1.2.x
alat kawalan jauh / asal / stabil / 1.3.x
jarak jauh / asal / stabil / 1.4.x
alat kawalan jauh / asal / stabil / 1.5.x
alat kawalan jauh / asal / stabil / 1.6.x
jarak jauh / asal / stabil / 1.7.x
alat kawalan jauh / asal / stabil / 1.8.x
alat kawalan jauh / asal / stabil / 1.9.x
alat kawalan jauh / asal / stabil / 2.0.x

Ringkasan

Git cetek cetek dapat membantu anda menjimatkan masa dan ruang cakera keras. Tetapi ia berharga. Sekiranya anda kerap memasukkan kod ke repositori terpencil, ia akan meningkatkan masa komitmen. Jadi, untuk aliran kerja biasa, adalah idea yang baik untuk mengelakkan klon cetek.

Rujukan:

Port Sumber Terbuka Mesin Permainan Komersial
Rekreasi enjin permainan sumber terbuka dan bebas platform boleh digunakan untuk bermain lama dan juga beberapa tajuk permainan yang baru-baru ini. Ar...
Permainan Perintah Terbaik untuk Linux
Baris perintah bukan hanya sekutu terbesar anda ketika menggunakan Linux-ia juga dapat menjadi sumber hiburan kerana anda dapat menggunakannya untuk m...
Aplikasi Pemetaan Gamepad Terbaik untuk Linux
Sekiranya anda suka bermain permainan di Linux dengan gamepad dan bukannya sistem input papan kekunci dan tetikus biasa, ada beberapa aplikasi berguna...