Saya mulai memindahkan toko NET ini dari svn ke git, dan telah mengidentifikasi beberapa masalah tambahan. Saya ingin memiliki solusi sebelum kita mematikan saklar.
Yang saya tanyakan secara khusus dalam pertanyaan ini adalah penegakan hukum. Secara default git untuk instalasi windows dengan 'checkout crlf, commit lf', yang tidak akan berfungsi untuk sekelompok sumber yang (sejauh yang saya ketahui) secara eksklusif terdiri dari akhiran crlf.
Saya tidak tahu bahwa saya akan secara buta memercayai dev mana pun untuk mengonfigurasikan ini dengan benar bahkan diberikan instruksi, jadi saya sedang mempertimbangkan satu (atau keduanya) dari yang berikut tetapi penasaran apakah ada orang di sini yang telah menempuh rute lain.
- Kait pra-komit yang memeriksa akhir baris jika (atau mungkin semua akhir baris), dan menolak dalam acara itu.
- Script instal yang didistribusikan ke devs yang mengisi konfigurasi global dengan 'apa adanya, apa adanya'.
PS Saat menulis ini terpikir oleh saya bahwa konversi awal dari svn ke git dapat melakukan cara default dan selama orang terjebak ke default yang akan cukup mulus juga. Setelah menjadi dev menggunakan git di toko .NET yang menginstal git dengan 'as-is, as-is' yang non-default, saya telah membuat masalah saya sendiri di sana (semuanya akan digulirkan secara default sebelum kedatangan saya) . Jadi saya masih condong ke semacam mekanisme penegakan hukum.
Jawaban:
Untuk menjawab pertanyaan tentang bagaimana menegakkan sesuatu secara lokal, Anda tidak dapat tanpa melakukan beberapa hal yang sangat berat dalam mengelola dan menegakkan keadaan setiap workstation pengembang, dan saya biasanya berpendapat bahwa pengembang mungkin harus menjadi admin lokal dalam pengembangan mereka. mesin karena jika mereka tidak maka mereka hanya akan menghabiskan waktu mereka mencari cara untuk mendapatkan hak istimewa itu pula.
Dan itu mungkin karena Anda tidak perlu peduli dengan keadaan konfigurasi lokal saat menggunakan kontrol versi terdistribusi. Anda seharusnya hanya peduli dengan keadaan konfigurasi Anda . Dengan anggapan Anda menggunakan git sebagai sistem kontrol versi tersentralisasi, karena itulah yang pada dasarnya dilakukan semua orang karena termudah, maka mari kita asumsikan bahwa konfigurasi "Anda" adalah salinan kode yang disimpan di server pusat.
Jika demikian, maka Anda tidak boleh menerima penggabungan yang, seperti yang Anda sebutkan, mematahkan akhiran garis crlf / lf. Jadi Anda menegakkan bahwa ketika beberapa mencoba klien lainnya untuk mendorong perubahan yang Anda dengan logika sisi server yang menolak permintaan untuk mencemari Anda repo dengan mereka berpotensi melanggar pilihan gaya.
sumber
Kami membutuhkan proses peninjauan menggunakan permintaan Tarik di github ke dev utama atau cabang utama kami. Selama proses peninjauan itu, kami akan menandai permintaan tarikan sebagai memerlukan perubahan jika banyak file memiliki perbedaan spasi putih atau akhir baris, dan bersikeras bahwa mereka mengikuti pemformatan dari dev atau cabang master tempat mereka membuat permintaan tarikan.
Ada juga beberapa alat yang bagus tergantung pada bahasa yang Anda gunakan dan alat CI mana yang Anda gunakan, yang dapat, selama proses pembuatan atau menarik langkah permintaan memformat kode secara otomatis berdasarkan aturan yang Anda atur. Itu juga membantu menjaga kode terlihat konsisten dan meminimalkan masalah format ketika melakukan kode.
sumber
Anda bisa menggunakan per konfigurasi repositori untuk mengesampingkan konfigurasi pengguna berdasarkan per-repositori. Ketika dilakukan pada repo yang dianggap sebagai sumber utama, ia harus diperbanyak dengan klon dan menarik ke repo lain termasuk yang lokal sehingga mengesampingkan konfigurasi lokal secara terpusat.
Anda dapat lebih lanjut menegakkan ini melalui kait di repo pusat Anda untuk memeriksa bahwa ujung file adalah apa yang seharusnya dan menolak penggabungan / push jika tidak halal. Namun pengait ini tidak akan dikloning dengan repo, paling tidak tidak secara langsung tetapi ini tidak perlu karena peraturan hanya perlu ditegakkan di repo pusat.
Dengan menggunakan templat di git init Anda, Anda dapat memastikan bahwa repo Anda dibuat sama dengan semua file gitignore, gitattributes dll seperti yang Anda inginkan.
Hal terakhir, tidak terkait langsung dengan pertanyaan Anda, saya menemukan titik gesekan terbesar ketika membawa tim svn saavy ke alur kerja berbasis git apa yang membuat mereka terbiasa dengan repo tambahan di tengah. Saya menemukan bahwa lembar isyarat visual ini membantu sedikit menjelaskan perintah mana yang berdampak pada bagian mana.
Semoga ini sedikit membantu.
sumber