Saya ingin mengkloning GIT repo dan TIDAK berakhir dengan .git
direktori. Dengan kata lain saya hanya ingin file. Apakah ada cara untuk melakukan ini?
git clone --no-checkout
melakukan kebalikan dari apa yang saya inginkan (memberi saya hanya .git
direktori).
Saya mencoba melakukan itu untuk repo jarak jauh , bukan repo lokal, yang berarti ini bukan duplikat dari " Bagaimana melakukan" ekspor git "(seperti" ekspor svn ") " (meskipun solusi mungkin akhirnya menjadi sama).
git archive
sekarang (Q4 2017) lebih tepat dan tidak akan menyertakan folder kosong.Jawaban:
Perintah git yang akan menjadi terdekat dari apa yang Anda cari akan lewat
git archive
.Lihat mencadangkan proyek yang menggunakan git : ia akan memasukkan dalam arsip semua file (termasuk submodul jika Anda menggunakan
git-archive-all
skrip)Anda kemudian dapat menggunakan arsip itu di mana saja, memberikan Anda hanya file, tanpa
.git
direktori.Jika Anda memerlukan folder dan file hanya dari tingkat pertama:
Untuk daftar hanya folder tingkat pertama dari repo jarak jauh:
Catatan: itu tidak berfungsi untuk GitHub (tidak didukung)
Jadi, Anda perlu mengkloning (dangkal untuk mempercepat langkah klon), dan kemudian mengarsipkan secara lokal :
Pilihan lain adalah melakukan klon dangkal (seperti yang disebutkan di bawah), tetapi menemukan folder .git di tempat lain.
Folder repo hanya akan menyertakan file, tanpa
.git
.Catatan:
git --git-dir
adalah opsi perintahgit
, bukangit clone
.Perbarui dengan Git 2.14.X / 2.15 (Q4 2017): itu akan memastikan untuk menghindari menambahkan folder kosong .
Lihat komit 4318094 (12 Sep 2017) oleh René Scharfe (``) .
Disarankan oleh: Jeff King (
peff
) .(Digabung oleh Junio C Hamano -
gitster
- dalam komit 62b1cb7 , 25 Sep 2017)sumber
git --git-dir=/dev/null clone --depth=1 /url/to/repo
git archive --remote=https://github.com/pornel/dssim.git @ | tar -t
saya mengertitar: This does not look like a tar archive
. Tidakkah itu bekerja dengan GitHub? Juga, apa@
artinya itu?@
: Saya telah menghapusnya. Juga GitHub tidak mendukung remotegit archive
: Saya telah mengedit jawaban untuk mengusulkan alternatif.diambil dari sini
sumber
--format=tar
tidak perlu. "tar" adalah output default, tidak perlu ditentukan.tar x
sudah mencukupiAnda dapat membuat klon dangkal untuk hanya mendapatkan beberapa revisi terakhir:
maka cukup hapus direktori .git atau gunakan
git archive
untuk mengekspor pohon Anda.sumber
Mengapa tidak melakukan kloning dan kemudian menghapus
.git
direktori sehingga Anda hanya memiliki copy pekerjaan kosong?Sunting: Atau sebenarnya mengapa menggunakan clone sama sekali? Agak membingungkan ketika Anda mengatakan bahwa Anda ingin git repo tetapi tanpa
.git
direktori. Jika Anda bermaksud bahwa Anda hanya ingin salinan beberapa keadaan pohon lalu mengapa tidak lakukancp -R
di shell daripada git clone dan kemudian hapus.git
setelahnya.sumber
Sepertinya Anda hanya ingin menyalin kode sumber. Jika demikian mengapa tidak menyalin direktori saja dan mengecualikan direktori .git dari salinan?
sumber
git checkout -f
Ada cara lain untuk melakukan ini dengan memisahkan repo dari pohon yang berfungsi.
Metode ini berguna jika Anda perlu memperbarui file-file git-less git ini secara teratur. Sebagai contoh, saya menggunakannya ketika saya perlu memeriksa file sumber dan membangun artefak, lalu menyalin artefak ke repo yang berbeda hanya untuk penyebaran ke server, dan saya juga menggunakannya ketika mendorong kode sumber ke server ketika saya ingin kode sumber untuk checkout dan membangun ke direktori www.
Kami akan membuat dua folder, satu untuk git satu untuk file yang berfungsi:
inisialisasi repo telanjang:
Kemudian buat kait pasca-terima:
Edit pos-terima di editor favorit Anda:
Tambahkan ini sebagai remote:
Sekarang setiap kali Anda mendorong ke repo telanjang ini akan checkout pohon kerja
/workingfiles/
. Tapi/workingfiles/
itu sendiri tidak di bawah kontrol versi; berjalangit status
di/workingfiles/
akan memberikan kesalahanfatal: Not a git repository (or any parent up to mount point /data)
. Ini hanya file biasa.Tidak seperti solusi solusi lainnya,
rm -r .git
perintah tidak diperlukan, jadi jika/workingfiles/
ada repo git lain, Anda tidak perlu khawatir dengan perintah yang digunakan untuk menghapus file git repo lainnya.sumber