Cara melacak kode eksternal di git

0

Saya sedang mengerjakan proyek di mana beberapa kode asli ke proyek, beberapa kode dimodifikasi dari sumber eksternal (beberapa di antaranya menggunakan VCS seperti p4), dan beberapa kode dicerminkan dari sumber eksternal.

Bagaimana saya bisa melacak perubahan ke sumber kode eksternal, sambil menjaga kode saya tetap utuh?

Bisakah saya membuat cabang terpisah untuk masing-masing sumber eksternal, dan setiap kali mereka memperbaruinya, periksa perubahan mereka ke cabang itu, lalu gabungkan tiga cara itu ke jalur utama?

Ross Aiken
sumber

Jawaban:

1

Apakah setiap sumber eksternal perlu digabungkan ke proyek utama, atau dapatkah mereka dipisahkan dengan bersih sebagai perpustakaan / modul / plugin?

Submodules

Jika pustaka yang ingin Anda modifikasi dan lacak di git, Anda dapat menggunakan submodules . Ini memungkinkan Anda menyimpan proyek di dalam proyek, dan membuatnya mudah untuk memperbarui dari sumber proyek sambil membuat perubahan Anda sendiri.

Rebasing

Jika lebih masuk akal untuk menggabungkan mereka ke dalam proyek utama, lihat rebasing . Dengan penggabungan, riwayat komit Anda dapat mulai terlihat sangat membingungkan, terutama jika Anda menarik dari berbagai sumber.

Dengan rebasing, Anda pada dasarnya menempel satu set komit setelah set yang lain, menjadikannya seperti semuanya dikodekan secara linear satu demi satu.

Inilah artikel yang saya temukan sangat membantu ketika belajar git rebase.

Dekan
sumber
Saya pikir rebase melakukan apa yang saya inginkan, tetapi (ini mungkin pertanyaan yang agak bodoh :) apakah itu mengharuskan Anda memeriksa kode sumber asli yang tidak dimodifikasi sebelum mengubahnya? (mis. check in orisinal, buat perubahan, orisinal diperbarui, rebase ke orisinal yang diperbarui?)
Ross Aiken
Itu sebenarnya pertanyaan yang sangat penting. Anda ingin mengubah komit lokal Anda sebelum Anda mendorong ke repositori jarak jauh. Rebasing pada dasarnya menulis ulang sejarah commit. Karena itu, Anda tidak ingin me-rebase repositori jarak jauh yang mungkin digunakan orang lain. Mereka akan memiliki salinan lokal dan saat berikutnya mereka disinkronkan dengan remote, itu dapat menyebabkan banyak masalah jika histori komit remote telah berubah (dan tidak lagi cocok dengan versi lokal mereka). Jadi tidak apa-apa untuk rebase selama tidak ada orang lain yang melihat komitmen itu.
Dekan
Dan apa cara yang tepat untuk melakukan itu jika orang telah melihat komitmen? Katakanlah alur kerja yang terjadi adalah saya memeriksa yang asli, membuat perubahan, melakukan perubahan, mendorong perubahan ke server, orang lain menarik perubahan itu, melakukan dan mendorong kembali ke server, saya menarik perubahan itu, dan sekarang yang asli diperbarui?
Ross Aiken
Tim yang berbeda menggunakan alur kerja yang berbeda dan saya khawatir tidak ada jawaban yang benar. Untuk mempermudah, saya katakan hanya komit rebase yang belum didorong ke server jauh. Setelah orang lain melihat komitmen, rebasing dapat menyebabkan masalah jika Anda tidak benar-benar berhati-hati.
Dekan
Jadi apakah solusi hackish (tapi fungsional) adalah untuk mengkloning ke folder temp lainnya, lakukan rebase penggabungan, setelah semuanya diperbarui, ganti semua file dalam repo utama dengan versi yang diperbarui, kemudian lakukan perubahan itu seperti halnya commit normal?
Ross Aiken