Pertanyaan Bagaimana suatu negara repositori git disimpan selalu dapat diakses?


Saya mencoba menyusun aturan untuk sekelompok kecil orang yang berkolaborasi dalam perangkat lunak yang digunakan untuk analisis data. Penting untuk memiliki sarana untuk mereproduksi jalannya kode di beberapa titik di masa lalu, yaitu untuk kembali ke keadaan di masa lalu (sesuatu yang harus dikontrol oleh kontrol versi). Di masa lalu ini telah dimungkinkan bagi kita dengan svn. Kami kemudian dapat menandai hasil analisis data kami dengan nomor revisi svn yang digunakan untuk menjalankan itu.

Ada cerita tentang bagaimana melalui percabangan, penggabungan dan rebasing, sejarah hilang / dibuat tidak dapat diakses / mimpi buruk untuk sampai ke dll. Pada saat yang sama, penanganan yang mudah dari percabangan untuk pengembangan fitur eksperimental adalah apa yang membuat kita mempertimbangkan beralih dari svn ke git.

Jadi: Peraturan apa yang harus kita ikuti yang akan memastikan kita akan dengan mudah dan selalu dapat mengambil keadaan kode yang dijalankan untuk analisis tertentu? Hanya gunakan cabang utama untuk menjalankan analisis? Jika demikian operasi apa yang harus dilarang di cabang utama?

EDIT: Dua saran bagus dijelaskan di bawah ini: Pemberian tanda yang penting akan membuat analisis transparan dan dapat direproduksi (antlersoft). Ini tidak memerlukan aturan baru selain meninggalkan tag dalam damai. Alur kerja pemberian tag ini tidak memerlukan aturan untuk melakukan rebase dan penggabungan. Saran Tom Anderson berguna dalam repo sentral yang seharusnya mem-rumah semua kode yang memiliki tag terlampir (ini akan menjadi konvensi / aturan) dapat berfungsi untuk memungkinkan akses anggota lain ke bit kode ini.


4
2017-07-06 17:27


asal


Jawaban:


Solusi untuk ini tidak perlu melibatkan membatasi apa yang dapat Anda lakukan di cabang mana pun. Cukup gunakan tag git, dan jangan menghapus atau memindahkannya. Tandai commit yang Anda gunakan untuk menjalankan setiap analisis, dan rekam tag commit dengan analisis (ini sangat mirip dengan apa yang Anda lakukan di svn, kecuali sebagai pengganti nomor revisi yang dihasilkan oleh VCS itu adalah nama tag yang Anda berikan). Kemudian versi untuk analisis dan semua sejarahnya akan selalu tersedia, terlepas dari apa lagi yang Anda lakukan (rebase, dll) di cabang.


3
2017-07-06 17:40



Satu-satunya aturan yang harus Anda ikuti adalah tidak pernah menghapus riwayat. Itu berarti tidak pernah melakukan rebase, atau menggunakan beberapa operasi lain yang kurang umum.

Sebaliknya, itu berarti tidak pernah melakukan rebase (dll) dalam repositori dari mana Anda menjalankan analisis Anda. Orang dapat melakukan rebase secara bebas di repositori lain. Apakah mungkin bagi Anda untuk membuat repositori 'master emas', ke mana semua orang mendorong kode, dengan kebijakan no-rebase, dan menggunakannya untuk menjalankan analisis Anda? Orang-orang kemudian dapat mengembangkan kode namun mereka suka secara lokal, dan mendorong ke repositori itu ketika siap untuk dijalankan. Itu adalah alur kerja yang cukup normal untuk tim yang menggunakan DVCS.

Jika orang perlu menjalankan analisis (untuk publikasi, sebagaimana adanya) dari repositori lokal mereka, maka hal-hal yang rumit. Saya akan menyarankan bahwa setiap orang memiliki dua repositori lokal, satu untuk pengembangan, dan satu lagi untuk melakukan analisis. Rebase diperbolehkan dalam repositori pengembangan, tetapi kode harus didorong ke repositori analisis untuk digunakan (dan kemudian ke sisa tim). Itu sedikit lebih lemah, karena hanya konvensi yang menghentikan orang-orang yang melakukan rebase di repositori analisis, sedangkan dengan repositori pusat yang tidak digunakan oleh siapa pun secara langsung, rebase bukanlah sesuatu yang akan terjadi.


2
2017-07-06 17:34



Saya tahu thread ini sudah tua tapi saya hanya ingin membuat satu hal jelas ...
Rebase tidak menghapus riwayat apa pun, dan tidak menghapus commit apa pun. Ini hanya menambah komit baru dan memindahkan referensi cabang.
Selama komit direferensikan oleh apa pun (cabang, tag, atau komitmen lainnya) itu akan hidup selamanya.
Hanya objek yang tidak direferensikan dihapus jika mereka sudah tua (kira-kira itu adalah 30 hari secara default) dan Anda melakukan pengumpulan sampah atau serupa.


2
2017-12-17 16:11