Saya punya proyek dengan git, dan saya hanya ingin mengkloning atau menarik direktori tertentu, seperti myproject / javascript seperti halnya subversi.
buat beberapa perubahan, komit dan dorong kembali.
Itu mungkin?
Di mana " path/..." dalam (3) dimulai pada direktori tepat di bawah akar repo yang berisi " .../file" Anda
Perhatikan bahwa alih-alih "HEAD", kode hash dari komit tertentu dapat digunakan, dan kemudian Anda akan mendapatkan revisi (file) atau revisi (dir) khusus untuk komit itu.
Baru sadar saya salah paham soal itu. Sebaliknya, saya menjawab bagaimana cara checkout satu file, yang kemudian dapat dimodifikasi dan dikomit.
vergueishon
Anda menjawab judul pertanyaan, yang cukup bagus. Ini hanya menyelamatkan saya, jadi sejauh yang saya ketahui, ini adalah jawaban yang benar - terutama karena ini adalah hit teratas di Google untuk masalah ini.
Morgon
21
Ini masih mendapatkan seluruh repo. Untuk proyek berukuran 2GB, ini tidak menghemat banyak waktu ..
Pithikos
5
Bagi mereka yang membaca komentar ini dan tidak tahu bagaimana ini tidak menjawab pertanyaan, apa solusi ini adalah memberi Anda salinan hanya dari satu folder, tetapi itu bukan salinan yang berfungsi, yang berarti Anda tidak dapat memodifikasi dan kembali -melakukan. Jadi seperti yang dikatakan @Morgon, ini membahas judul pertanyaan (Anda BISA hanya menarik satu dir), tetapi tidak menjawab isi pertanyaan ("buat beberapa perubahan, komit, dan tekan kembali").
msb
@StanHolodnak --tidak diperlukan. Itu memaksa bit setelah itu untuk ditafsirkan sebagai jalan. Jadi, ya, jika Anda memiliki file dengan nama --helpyang ingin Anda checkout, awalan dengan tanda hubung ini diperlukan:git checkout HEAD -- --help
ini berfungsi jika Anda hanya ingin menggunakan versi file yang jauh untuk mengganti file lokal, saya kira
John
ini tarik folder juga, bagaimana tidak meng-donwload folder, tetapi hanya hal-hal di dalam folder?
Al Kasih
Tidak perlu fetchatau checkoutperintah, kita bisa membuat permintaan tarik demi remote addperintah untuk mendapatkan seluruh cabang master.
Iqra.
2
Seperti yang ditunjukkan Pithkos dalam jawaban yang diterima, jawaban ini juga akan mengunduh repositori jarak jauh SELURUH ke mesin lokal Anda. jawaban shingara adalah yang paling jelas - tidak ada cara untuk menarik sebagian repo dari jarak jauh. Namun, bagi mereka yang tidak keberatan dengan bandwidth WHOLE fetch, dan tertarik untuk membuat copy pekerjaan dari sebagian cache lokal, maka jawaban yang diterima menunjukkan caranya. Tapi saya hanya ingin memperjelas seluruh sejarah repo (dalam format terkompresi) harus diunduh ke mesin Anda.
Gabe Halsmer
39
Setelah banyak mencari jawaban, tidak menemukan, menyerah, mencoba lagi dan seterusnya, saya akhirnya menemukan solusi untuk ini di utas SO lainnya:
Untuk melakukan apa yang diinginkan OP (hanya bekerja pada satu dir), cukup tambahkan satu dir ke .git/info/sparse-checkout, ketika melakukan langkah-langkah di atas.
Saya mempostingnya di sini sebagian besar karena setiap kali saya mencoba google cara melakukan itu, ini adalah hasil teratas, dan utas itu bahkan tidak dekat untuk ditampilkan. :( Saya merasa copy-paste buruk, tapi saya rasa ini adalah praktik terbaik?
msb
1
Ini adalah satu-satunya solusi bersih. Mencoba jawaban di atas. Setelah saya memeriksa cabang saya dengan jawaban lain, saya tidak bisa menarik, dan memiliki beberapa file baru yang perlu dilakukan. Dengan solusi ini semuanya terlihat benar. Tetapi CATATAN: Terlepas dari cabang yang diperiksa, git akan berpikir Anda berada di master. Pastikan Anda melakukannya git branch --set-upstream-to=origin/<branch>dengan benar
seebiscuit
12
Itu tidak mungkin. Anda perlu menarik semua repositori atau tidak sama sekali.
Meskipun Anda perlu mengambil semuanya, apakah tarikan pada pohon yang berfungsi jarang menarik dalam kasus ini? Lihat stackoverflow.com/questions/2416815/…
VonC
10
Hanya untuk menambahkan ini, alasan mengapa Anda tidak dapat menarik hanya direktori adalah karena git menggunakan pelacakan semantik data, bukan pelacakan semantik file, sehingga Anda dapat dengan mulus memindahkan kode (atau data lain) masuk dan keluar dari file tanpa harus memberi tahu sumbernya sistem pelacakan (sampai Anda memperbarui tentu saja.) Karena itu, kode dapat bergerak masuk dan keluar dari direktori juga, jadi mengambil satu direktori saja tidak masuk akal. Semoga ini membantu.
OmnipotentEntity
12
@OmnipotentEntity Maaf tapi IMHO itu tidak masuk akal. Implementasinya seharusnya tidak membatasi penggunaan. Git tahu direktori apa itu (setidaknya ketika membuat copy pekerjaan lokal) sehingga tidak ada alasan ia tidak dapat melakukan beberapa operasi serupa di server dan hanya mengirim output yang relevan. Memang, itu tidak diterapkan saat ini tetapi itu karena kurangnya fitur, bukan ketidakmungkinan mendasar. Secara pribadi saya pikir ini adalah fitur yang cukup penting tapi hei, itu salah satu alasan saya menghindari git jika memungkinkan.
Ini mengunduh direktori file tertentu untuk keperluan pengarsipan, ini tidak menarik salinan yang dapat Anda modifikasi dan tekan kembali.
leetNightshade
Sangat keren. Mungkin tidak dapat diterima sebagai solusi untuk OP tetapi sebenarnya apa yang saya cari sejak saya hanya perlu mencari isi folder besar dalam repo yang lebih besar saya pasti tidak ingin mengambil, dan saya tidak perlu memodifikasi / Dorong.
Oliver
7
Jika Anda ingin mendapatkan perubahan terbaru dalam direktori tanpa memasukkannya, Anda dapat melakukan:
Kadang-kadang, Anda hanya ingin melihat salinan file sebelumnya tanpa kesulitan melalui diffs.
Dalam kasus seperti itu, sangat mudah untuk membuat klon dari repositori dan memeriksa komit spesifik yang Anda minati dan melihat subdirektori dalam repositori yang dikloning itu. Karena semuanya lokal Anda hanya dapat menghapus klon ini ketika Anda selesai.
Untuk semua perjuangan dengan jalur file teoretis dan contoh-contoh seperti yang saya lakukan, di sini contoh nyata: Microsoft menawarkan dokumen dan contoh mereka di git hub, sayangnya mereka mengumpulkan semua file contoh mereka untuk sejumlah besar topik dalam repositori ini:
Jawaban:
git fetch
git checkout HEAD path/to/your/dir/or/file
Di mana "
path/...
" dalam (3) dimulai pada direktori tepat di bawah akar repo yang berisi ".../file
" AndaPerhatikan bahwa alih-alih "HEAD", kode hash dari komit tertentu dapat digunakan, dan kemudian Anda akan mendapatkan revisi (file) atau revisi (dir) khusus untuk komit itu.
sumber
--
tidak diperlukan. Itu memaksa bit setelah itu untuk ditafsirkan sebagai jalan. Jadi, ya, jika Anda memiliki file dengan nama--help
yang ingin Anda checkout, awalan dengan tanda hubung ini diperlukan:git checkout HEAD -- --help
Dalam direktori kosong:
sumber
fetch
ataucheckout
perintah, kita bisa membuat permintaan tarik demiremote add
perintah untuk mendapatkan seluruh cabang master.Setelah banyak mencari jawaban, tidak menemukan, menyerah, mencoba lagi dan seterusnya, saya akhirnya menemukan solusi untuk ini di utas SO lainnya:
Cara git-pull semua kecuali satu folder
Untuk menyalin-rekatkan apa yang ada di sana:
Untuk melakukan apa yang diinginkan OP (hanya bekerja pada satu dir), cukup tambahkan satu dir ke
.git/info/sparse-checkout
, ketika melakukan langkah-langkah di atas.Banyak terima kasih banyak kepada @cforbish!
sumber
master
. Pastikan Anda melakukannyagit branch --set-upstream-to=origin/<branch>
dengan benarItu tidak mungkin. Anda perlu menarik semua repositori atau tidak sama sekali.
sumber
Mungkin perintah ini bisa membantu:
"Et voilà"
sumber
Jika Anda ingin mendapatkan perubahan terbaru dalam direktori tanpa memasukkannya, Anda dapat melakukan:
sumber
git clone --filter
dari Git 2.19Opsi ini sebenarnya akan melewatkan mengambil objek yang tidak dibutuhkan dari server.
Saya telah menulis jawaban terperinci yang menjelaskan status dukungan saat ini di: Bagaimana saya mengkloning hanya subdirektori dari repositori Git?
Sangat mungkin bahwa apa pun yang diterapkan
git clone
di daerah itu juga akan memilikigit pull
analog.sumber
Mencoba dan menguji ini berhasil!
Semoga ini bermanfaat!
sumber
Kadang-kadang, Anda hanya ingin melihat salinan file sebelumnya tanpa kesulitan melalui diffs.
Dalam kasus seperti itu, sangat mudah untuk membuat klon dari repositori dan memeriksa komit spesifik yang Anda minati dan melihat subdirektori dalam repositori yang dikloning itu. Karena semuanya lokal Anda hanya dapat menghapus klon ini ketika Anda selesai.
sumber
Untuk semua perjuangan dengan jalur file teoretis dan contoh-contoh seperti yang saya lakukan, di sini contoh nyata: Microsoft menawarkan dokumen dan contoh mereka di git hub, sayangnya mereka mengumpulkan semua file contoh mereka untuk sejumlah besar topik dalam repositori ini:
Saya hanya tertarik pada file Microsoft Dynamics js di path
jadi saya melakukan yang berikut
membuat
file di folder repositori saya pada disk
dalam direktori itu menggunakan cmd di windows
Isi file
adalah
akhirnya lakukan a
sumber