Saya bekerja dengan repositori dengan sejumlah besar file yang membutuhkan waktu berjam-jam untuk checkout. Saya sedang mencari kemungkinan apakah Git akan bekerja dengan baik dengan repositori jenis ini sekarang karena ia mendukung pemeriksaan jarang, tetapi setiap contoh yang dapat saya temukan lakukan sebagai berikut:
git clone <path>
git config core.sparsecheckout true
echo <dir> > .git/info/sparse-checkout
git read-tree -m -u HEAD
Masalah dengan urutan perintah ini adalah klon asli juga melakukan checkout. Jika Anda menambahkan -n ke perintah klon asli, maka perintah baca-pohon menghasilkan kesalahan berikut:
kesalahan: checkout Jarang meninggalkan entri di direktori kerja
Bagaimana cara melakukan checkout jarang tanpa memeriksa semua file terlebih dahulu?
git worktree add --no-checkout
akan bekerja juga (tidak adilgit clone --no-checkout
) dengan git 2.9 (Baru 2016). Lihat jawaban saya di bawah iniJawaban:
Pada tahun 2020 ada cara yang lebih sederhana untuk berurusan dengan jarang-checkout tanpa harus khawatir tentang file git. Inilah cara saya melakukannya:
Perhatikan bahwa ini membutuhkan git versi 2.25 yang diinstal. Baca lebih lanjut di sini: https://github.blog/2020-01-17-bring-your-monorepo-down-to-size-with-sparse-checkout/
MEMPERBARUI:
git clone
Perintah di atas masih akan mengkloning repo dengan riwayat lengkapnya, meskipun tanpa memeriksa file. Jika Anda tidak memerlukan riwayat lengkap, Anda dapat menambahkan parameter --depth ke perintah, seperti ini:sumber
sparse-checkout --cone
fitur di stackoverflow.com/a/59515426/6309--filter
) ke jawaban Anda di sini.--depth
parameter yang memungkinkan kita untuk melakukan klon yang dangkal. Akankah itu membantu? @ Tao, tidak yakin bagaimana menggunakannya--filter
dalam kasus ini, saya tidak mencobanya. Bisakah Anda memberikan contoh, atau memposting jawaban lain untuk topik ini?Harap dicatat bahwa jawaban ini tidak mengunduh salinan data lengkap dari repositori. The
git remote add -f
perintah akan mengkloning seluruh repositori. Dari halaman manual darigit-remote
:Coba ini:
Sekarang Anda akan menemukan bahwa Anda memiliki checkout "pangkas" dengan hanya file dari path / inside_repo / ke / diinginkan_subdir hadir (dan di jalur itu).
Perhatikan bahwa pada baris perintah windows Anda tidak boleh mengutip path, yaitu Anda harus mengubah perintah ke-6 dengan yang ini:
jika tidak, Anda akan mendapatkan penawaran di file jarang-checkout, dan itu tidak akan berfungsi
sumber
git remote add
download perintah segala sesuatu karena itulah yang-f
dilakukannya - mengatakan itu untuk segera mengambil, sebelum Anda mendefinisikan jarang pilihan checkout. Tetapi menghilangkan atau menata ulang itu tidak akan membantu. Checkout jarang mempengaruhi hanya pohon kerja, bukan repositori. Jika Anda ingin repositori melakukan diet sebagai gantinya, maka Anda perlu melihat opsi--depth
atau--single-branch
sebagai gantinya.Git clone memiliki opsi (
--no-checkout
atau-n
) yang melakukan apa yang Anda inginkan.Dalam daftar perintah Anda, ubah saja:
Untuk ini:
Anda kemudian dapat menggunakan checkout jarang seperti yang dinyatakan dalam pertanyaan.
sumber
--depth <depth>
opsi pada git clone. Itu hanya akan mengunduh<depth>
komitmen terakhir dari riwayat. Saat ini tidak ada cara untuk mengunduh sebagian komit tunggal dengan git, meskipun jika remote Anda mendukungnya, Anda dapat menggunakannyagit archive --remote
untuk mengunduh sebagian file.Saya memiliki kasus penggunaan yang sama, kecuali saya ingin checkout hanya komit untuk tag dan memangkas direktori. Menggunakan
--depth 1
membuatnya sangat jarang dan benar-benar dapat mempercepat.sumber
Saya menemukan jawaban yang saya cari dari one-liner yang diposting sebelumnya oleh pavek (terima kasih!) Jadi saya ingin memberikan jawaban lengkap dalam satu jawaban yang bekerja di Linux (GIT 1.7.1):
Saya mengubah urutan perintah tapi sepertinya tidak berdampak apa-apa. Kuncinya adalah keberadaan garis miring "/" di ujung jalan di langkah 5.
sumber
Sayangnya tidak ada yang di atas bekerja untuk saya, jadi saya menghabiskan waktu yang sangat lama mencoba berbagai kombinasi
sparse-checkout
file.Dalam kasus saya, saya ingin melewatkan folder dengan konfigurasi IntelliJ IDEA.
Inilah yang saya lakukan:
Lari
git clone https://github.com/myaccount/myrepo.git --no-checkout
Lari
git config core.sparsecheckout true
Dibuat
.git\info\sparse-checkout
dengan konten berikutJalankan 'git checkout -' untuk mendapatkan semua file.
Hal penting untuk membuatnya berfungsi adalah menambahkan
/*
nama setelah folder.Saya punya git 1.9
sumber
Ya, Kemungkinan untuk mengunduh folder alih-alih mengunduh seluruh repositori. Bahkan ada / komit terakhir
Cara yang bagus untuk melakukan ini
-R HEAD hanya akan mengunduh revisi terakhir, abaikan semua riwayat.
Catatan trunk dan / folder spesifik
Salin dan ubah URL sebelum dan sesudah
/trunk/
. Saya harap ini akan membantu seseorang. Nikmati :)Diperbarui pada 26 Sep 2019
sumber
Jawaban yang diperbarui 2020:
Sekarang ada perintah
git sparse-checkout
, yang saya presentasikan secara rinci dengan Git 2.25 (Q1 2020)nicono 's jawaban menggambarkan penggunaannya:
Ini telah berevolusi dengan Git 2.27 dan tahu cara "mengajukan kembali" checkout yang jarang, seperti di sini .
Perhatikan bahwa dengan Git 2.28, Anda
git status
akan disebutkan bahwa Anda berada dalam repositori yang jarang diperiksaJawaban asli: 2016
git 2.9 (Juni 2016) akan menggeneralisasi
--no-checkout
opsi untukgit worktree add
(perintah yang memungkinkan untuk bekerja dengan banyak pohon yang bekerja untuk satu repo )Lihat komit ef2a0ac (29 Mar 2016) oleh Ray Zhang (
OneRaynyDay
) .Dibantu-oleh: Eric Sunshine (
sunshineco
) , dan Junio C Hamano (gitster
) .(Digabung oleh Junio C Hamano -
gitster
- dalam komit 0d8683c , 13 Apr 2016)Itu
git worktree
halaman manual sekarang termasuk:sumber
Langkah-langkah untuk jarang checkout hanya folder tertentu:
sumber
Berdasarkan jawaban ini oleh apenwarr dan komentar oleh Miral ini saya menemukan solusi berikut yang menyelamatkan saya hampir 94% dari ruang disk ketika mengkloning repositori linux git secara lokal sementara hanya menginginkan satu subdirektori Dokumentasi:
Jadi saya turun dari 2.9GB ke 182MB yang sudah cukup bagus.
Meskipun saya tidak mendapatkan ini untuk bekerja dengan
git clone --depth 1 --no-checkout --filter=blob:none file:///…/linux linux-sparse-test
( mengisyaratkan di sini ) karena kemudian file yang hilang semua ditambahkan sebagai file yang dihapus ke indeks. Jadi, jika ada yang tahu yang setaragit clone --filter=blob:none
dengangit fetch
, kita mungkin bisa menghemat lebih banyak megabita. (Membaca halaman manualgit-rev-list
juga mengisyaratkan bahwa ada sesuatu seperti--filter=sparse:path=…
, tetapi saya juga tidak berhasil.(Semua mencoba dengan git 2.20.1 dari Debian Buster.)
sumber
--filter=sparse:path=…
.Saya baru mengenal git tetapi tampaknya jika saya melakukan checkout git untuk setiap direktori maka ia bekerja. Juga, file sparse-checkout perlu memiliki garis miring setelah setiap direktori seperti yang ditunjukkan. Seseorang yang lebih berpengalaman, harap pastikan bahwa ini akan berhasil
Menariknya, jika Anda checkout direktori yang tidak ada dalam file checkout jarang tampaknya tidak ada bedanya. Mereka tidak muncul dalam status git dan git read-tree -m -u HEAD tidak menyebabkannya dihapus. git reset --hard juga tidak menyebabkan direktori dihapus. Adakah yang lebih berpengalaman peduli untuk mengomentari pendapat git tentang direktori yang diperiksa tetapi yang tidak ada dalam file checkout yang jarang?
sumber
Di git 2.27, sepertinya checkout git jarang telah berkembang. Solusi dalam hal ini jawabannya tidak bekerja dengan cara yang sama (dibandingkan dengan git 2,25)
Perintah-perintah ini bekerja lebih baik:
Lihat juga: tambahkan git-clone --sparse dan git-sparse-checkout
sumber
Dalam kasus saya, saya ingin melewati
Pods
folder ketika kloning proyek. Saya melakukan langkah demi langkah seperti di bawah ini dan itu berhasil untuk saya. Semoga ini bisa membantu.Memo, Jika Anda ingin melewati lebih banyak folder, tambahkan saja lebih banyak baris dalam file jarang-checkout.
sumber