Alur kerja Git apa yang terbaik untuk bekerja dengan proyek sumber terbuka dengan perubahan khusus perusahaan?

11

Di perusahaan saya saat ini, kami menggunakan proyek sumber terbuka yang dihosting di Github sebagai komponen aplikasi kami. Saya telah mengerjakan proyek ini untuk menambahkan beberapa fitur yang kami butuhkan dan mengintegrasikannya dengan sistem build kami. Manajer saya dan saya sepakat bahwa kami ingin menyerahkan sebanyak mungkin pekerjaan kami pada komponen ini sebagaimana masuk akal kembali ke proyek open-source. Pertanyaan saya adalah tentang apa alur kerja / teknik terbaik untuk mempertahankan komitmen Git sedemikian rupa sehingga saya dapat dengan mudah memisahkan hal-hal yang masuk akal untuk ditambahkan kembali ke proyek open-source - perbaikan bug dan fitur-fitur baru yang cukup umum - dari hal-hal yang spesifik untuk proyek kami, seperti membangun lokasi dan konstanta aplikasi.

Apa yang telah saya lakukan sejauh ini adalah mempertahankan cabang Git pribadi di mana saya melakukan semua perubahan saya, dengan rincian yang sesuai. Saya kemudian gunakan cherry-pickuntuk menambahkan komit sumber-terbuka ke cabang master, dan mengirimkannya kembali ke Github.

Sepertinya saya harus menggunakan penggabungan untuk melakukan ini, sehingga saya tidak terus membuat komit terpisah dengan konten yang identik, tapi saya tidak yakin bagaimana melakukan ini dengan mengecualikan komit khusus perusahaan dan menjaga alur kerja yang masuk akal.

Sebagai contoh, saya kira saya bisa melakukan hal-hal yang dapat-sumber-sumber pada master dan hal-hal khusus perusahaan di cabang pribadi, dan kemudian menggabungkan master ke cabang itu sesuai kebutuhan, membiarkan cabang master menunjuk komit sebelum penggabungan, sehingga saya bisa melakukan hal-hal yang dapat-sumber-terbuka untuk itu lagi dan kemudian bergabung lagi. Apa yang tampak canggung tentang alur kerja ini adalah bahwa saya harus memutuskan terlebih dahulu untuk semua yang saya lakukan di cabang mana itu berasal, mengerjakannya dengan apa yang tampak seperti selesai, kemudian komit dan gabungkan sebelum pengujian. Salah satu hal yang sangat saya sukai dari Git adalah betapa mudahnya melakukan apa saja yang Anda perlukan agar aplikasi Anda berfungsi, dan kemudian memutuskan nanti bagaimana dan di mana melakukan perubahan Anda. Sejauh yang saya tahu, jika Anda saat ini di cabang dan memiliki beberapa pekerjaan, ada '

Apakah yang saya lakukan merupakan alur kerja yang masuk akal untuk kontribusi jangka panjang? Adakah yang bisa merekomendasikan alur kerja yang berbeda yang mungkin lebih baik, dan mengapa itu lebih baik?

Tukang batu
sumber
1
Anda dapat mengirimkan beberapa pekerjaan ke cabang lain dengan cukup mudah - menggunakan rebase git-scm.com/book/en/Git-Branching-Rebasing . Selama Anda melakukan komit dulu, Anda kemudian bisa rebase komit itu ke cabang lain, lalu reset cabang Anda saat ini untuk menghapus komit.
artbristol

Jawaban:

2

Inilah strategi yang mungkin cocok untuk Anda:

Buat 2 repo pribadi git, dengan satu repo untuk pekerjaan perusahaan dan yang lain adalah repo umum (saya ingin komit kembali).

Agar sistem ini berfungsi, Anda perlu melakukan ini (yang saya anggap sebagai strategi paling penting): Tetapkan apa yang "umum" dan dapat digunakan oleh semua orang di komunitas

Dengan memiliki definisi ini, Anda dapat memisahkan apa yang akan Anda komit kembali dan apa yang tidak perlu Anda komit.

Masuk akal bahwa apa yang Anda kode untuk komunitas dalam bentuk umum, karena terlalu spesifik sepotong kode tidak akan menguntungkan siapa pun (dan bahkan mungkin tidak membuatnya ke cabang master).

Sekarang setelah Anda tahu apa yang akan Anda komit kepada komunitas, Anda dapat melakukan sebagian besar pekerjaan "memberi kembali" di repo yang didedikasikan untuk itu. Maka Anda cukup garpu repo itu ke repo berbasis pekerjaan Anda dan melakukan pekerjaan spesifik apa pun di atas itu.

Saya menduga Anda akan menghabiskan lebih banyak waktu dalam repo "hadiah", jadi ingatlah untuk memberikan komentar yang berharga, dll (bahkan mungkin dokumentasi) untuk orang-orang yang akan menggunakan proyek itu di masa depan.

Saya juga percaya bahwa git dapat melakukan lebih dari yang Anda pikirkan. Saya menonton video ini di Vimeo: http://vimeo.com/46010208 dan dia melakukan pekerjaan yang brilian untuk menjelaskan banyak hal aneh yang bisa dilakukan git.

Strategi saya bukan satu-satunya di luar sana, tetapi pasti bisa menjadi titik awal bagi Anda untuk memikirkan 1 yang cocok untuk Anda.

Joe
sumber
1

Bergantung pada sifat basis kode sumber terbuka dan apa yang perlu Anda capai dengan membuat perubahan, Anda mungkin mendapatkan banyak jarak tempuh dengan memisahkan kekhawatiran Anda. Di cabang proyek Anda, hanya tambahkan hal-hal yang Anda ingin berkontribusi kembali ke aslinya. Tambahkan kait atau titik ekstensi untuk memungkinkan Anda melakukan pekerjaan perusahaan Anda yang tidak akan dibagikan.

Dengan cara ini Anda tidak perlu khawatir tentang membagi atau memutuskan terlebih dahulu apa yang akan dibagikan dan apa yang tidak untuk dibagikan. Karena Anda menambahkan fleksibilitas pada proyek asli, Anda selalu dapat memilih untuk membagikan beberapa bagian pekerjaan perusahaan Anda nanti.

Allan
sumber