Bagaimana Anda menegakkan perilaku git, termasuk secara lokal (khususnya pada Windows)?

13

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.

ndarwincorn
sumber
2
Dengan sisi pre hook server, ini seharusnya dapat ditangani (pastikan akhir crlf dan gagal jika tidak), dengan kait pembaruan Anda juga dapat memperbarui pra-penggabungan. Jenis server git yang Anda gunakan? Jika ini harus dilakukan sisi workstation, seorang manajer Konfigurasi dapat menjadi cara untuk pergi, tetapi lebih sulit dan dengan banyak kelemahan.
Usaha terakhir berlatar belakang
1
Saya setuju dengan Tensibai, dan akan menambahkan bahwa opsi yang Anda pilih harus didasarkan pada seberapa ketat Anda percaya ini harus ditegakkan. Kait pra-komitmen untuk penegakan hukum yang ketat, memeriksa pelaporan kepatuhan pasca-komitmen.
Dave Swersky
Terima kasih Dave, alasan saya untuk penegakan sisi klien / ketat adalah itu akan memerlukan lebih sedikit pekerjaan secara keseluruhan untuk saya dan menangkap kesalahan lebih cepat. Tidak akan CM workstation devs tetapi server dev semua di DSC sehingga menambahkan itu akan sepele. Sunting: Terima kasih juga @Tensibai ... bisakah Anda menguraikan kelemahan yang Anda lihat di sisi klien?
ndarwincorn
1
Terutama jika Anda menegakkan sisi klien kait global, Anda mungkin pada akhirnya mencegah pekerjaan pada proyek yang membutuhkan ujung. Dan Anda harus mengaturnya dengan cara tertentu, Anda tidak bisa memastikan semua orang akan mengikuti pengaturan yang benar. Saya yakin ada footgun lain yang tidak saya pikirkan saat ini
Tensibai
Apa yang akhirnya Anda lakukan untuk menyelesaikan masalah Anda?
Newtopian

Jawaban:

6

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.

hvindin
sumber
4

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.

avi
sumber
Apakah Anda ingin menguraikan alat yang Anda gunakan? Mengingat ada beberapa cara untuk mencapai hal ini, dan kami punya cara kami sendiri tetapi belum benar-benar menerapkannya, saya ingin tahu bagaimana Anda menyelesaikannya.
ndarwincorn
1
Kami menggunakan naskah, github dan jenkins. Naskah memiliki ekosistem yang bagus untuk hal semacam ini.
avi
3

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.

Newtopian
sumber