Membuat submodule repositori dari folder dan menjaga git commit sejarah
Saya memiliki sebuah aplikasi web yang mengeksplorasi aplikasi web lain dengan cara tertentu. Ini berisi beberapa web demo di demo
folder dan salah satu demo yang sekarang harus memiliki itu's repositori sendiri. Saya ingin membuat repositori terpisah untuk aplikasi demo ini dan membuatnya menjadi subpackage submodule dari repositori utama tanpa kehilangan komit sejarah.
Adalah mungkin untuk tetap komit sejarah dari file dalam repositori's folder dan membuat repositori dari itu dan menggunakannya sebagai submodule sebaliknya?
98
3
Solusi Rinci
Dalam jawaban berikut, anda akan tahu bagaimana untuk mengekstrak folder dari repositori dan membuat repositori git dari itu dan kemudian termasuk sebagai [submodule][3] bukan folder.
Terinspirasi dari Gerg Bayer's artikel [Memindahkan File dari satu Repositori Git yang Lain, Melestarikan Sejarah][1]
Di awal, kami memiliki sesuatu seperti ini:
Solusinya by @GabLeRoux squashes cabang-cabang, dan terkait melakukan.
Cara yang mudah untuk mengkloning dan membuat semua orang tambahan cabang-cabang dan melakukan:
1 - pastikan anda memiliki git alias
2 - Clone remote, tarik semua cabang, mengubah jarak jauh, filter direktori anda, mendorong
GabLeRoux's solusi bekerja dengan baik kecuali jika anda menggunakan git lfs
dan memiliki besar file di bawah direktori yang ingin anda lepaskan. Dalam kasus itu, setelah langkah 3 semua file besar akan tetap menjadi pointer file yang bukan file nyata. Saya kira itu's mungkin karena
.gitattributes` file yang dihapus di filter cabang proses.Menyadari hal ini, saya menemukan berikut solusi yang bekerja untuk saya:
Menyalin
.gitattributes
yang git lfs menggunakan untuk melacak file-file besar ke.git/
direktori untuk menghindari dihapus.Ketika filter-cabang dilakukan don't lupa untuk menempatkan kembali
.gitattributes
jika anda masih ingin menggunakan git lfs untuk repositori baru: