คุณบังคับใช้พฤติกรรมคอมไพล์รวมถึงภายใน (โดยเฉพาะบน Windows) ได้อย่างไร


13

ฉันกำลังชี้ไปที่การย้ายร้านค้า NET นี้จาก svn ไป git และได้ระบุปัญหาเสริมบางอย่างที่ฉันต้องการมีวิธีแก้ไขก่อนที่เราจะสลับสวิตช์

สิ่งที่ฉันถามโดยเฉพาะในคำถามนี้คือการบังคับใช้การสิ้นสุดบรรทัด โดยค่าเริ่มต้น git สำหรับ Windows จะติดตั้งด้วย 'checkout crlf, commit lf' ซึ่งจะไม่ทำงานกับแหล่งที่มาซึ่งเป็นจำนวนมาก (เท่าที่ฉันทราบ) โดยเฉพาะประกอบด้วยจุดสิ้นสุด crlf

ฉันไม่รู้ว่าฉันเชื่อถือคนตาบอดที่ได้รับ dev ใด ๆ เพื่อกำหนดค่านี้อย่างถูกต้องแม้จะได้รับคำแนะนำดังนั้นฉันจึงพิจารณาหนึ่ง (หรือทั้งสองอย่าง) ต่อไปนี้ แต่ก็อยากรู้อยากเห็นถ้าใครที่นี่ไปเส้นทางอื่น

  • เบ็ดกระทำก่อนหน้าที่ตรวจสอบการสิ้นสุดบรรทัด lf ใด ๆ (หรืออาจสิ้นสุดการสิ้นสุดบรรทัด lf ทั้งหมด) และปฏิเสธในเหตุการณ์นั้น
  • สคริปต์การติดตั้งถูกแจกจ่ายไปยัง devs ที่เติมการตั้งค่าส่วนกลางด้วย 'ตามที่เป็นอยู่ตามที่เป็น'

ป.ล. ขณะที่เขียนสิ่งนี้เกิดขึ้นกับฉันว่าการแปลงเริ่มต้นจาก svn เป็น git สามารถกระทำวิธีการเริ่มต้นและตราบใดที่ผู้คนติดอยู่กับค่าเริ่มต้นที่จะราบรื่นเช่นกัน เคยเป็น dev ใช้ git ใน. NET shop ที่ติดตั้ง git ด้วยค่าเริ่มต้น 'ตามที่เป็น' ตามที่เป็น 'ฉันได้สร้างปัญหาของตัวเองที่นั่นเช่นกัน . ดังนั้นฉันยังคงพึ่งพากลไกการบังคับใช้บางประเภท


2
ด้วยฝั่งรับเบ็ดเซิร์ฟเวอร์นี้ควรจะสามารถจัดการได้ (ให้แน่ใจว่าตอนจบ crlf และล้มเหลวหากไม่ได้) ด้วยเบ็ดการปรับปรุงคุณควรจะสามารถปรับปรุง pre-merge ด้วย คุณใช้เซิร์ฟเวอร์ git ประเภทใด ถ้าสิ่งนี้จะต้องทำในด้านเวิร์กสเตชันผู้จัดการการกำหนดค่าสามารถเป็นวิธีที่จะไป แต่ยากขึ้นและมีข้อเสียมากมาย วิธีสุดท้ายคือการทับหลัง CI และล้มเหลวในการบังคับให้ผู้คนทำตามขั้นตอน
Tensibai

1
ฉันเห็นด้วยกับ Tensibai และจะเพิ่มเติมว่าตัวเลือกที่คุณเลือกควรขึ้นอยู่กับว่าคุณเชื่ออย่างเคร่งครัดว่าควรมีการบังคับใช้ ตะขอที่ส่งล่วงหน้าสำหรับการบังคับใช้อย่างเข้มงวดและขุยผ้าสำหรับการรายงานการปฏิบัติตามข้อกำหนดภายหลัง
Dave Swersky

ขอบคุณเดฟเหตุผลของฉันสำหรับการบังคับใช้ฝั่งไคลเอ็นต์ / เข้มงวดมากขึ้นคือมันจะทำให้การทำงานโดยรวมน้อยลงสำหรับฉันและรับข้อผิดพลาดได้เร็วขึ้น ไม่ไปที่เวิร์กสเตชันของ CM แต่จะมีเซิร์ฟเวอร์ dev อยู่ใน DSC ดังนั้นการเพิ่มที่จะไม่สำคัญ แก้ไข: ขอบคุณเช่นกัน @Tensibai ... คุณช่วยอธิบายรายละเอียดข้อเสียเหล่านั้นที่คุณเห็นให้กับลูกค้าได้ไหม?
ndarwincorn

1
ส่วนใหญ่ถ้าคุณบังคับใช้ไคลเอ็นต์ hook ของโกลบอลคุณอาจจบลงด้วยการป้องกันไม่ให้ทำงานในโครงการที่ต้องการ lf ตอนจบ และคุณต้องตั้งค่าในบางวิธีคุณไม่สามารถมั่นใจได้ว่าทุกคนจะปฏิบัติตามการตั้งค่าที่ถูกต้อง ฉันแน่ใจว่ามีปืนอื่นอีกที่ฉันไม่คิดตอนนี้
เทนไซไบ

คุณทำอะไรลงไปเพื่อแก้ปัญหาของคุณ?
Newtopian

คำตอบ:


6

เพื่อตอบคำถามว่าจะบังคับใช้บางสิ่งในพื้นที่ได้อย่างไรคุณไม่สามารถทำได้โดยไม่ต้องยกการจัดการและบังคับใช้สถานะของเวิร์คสเตชั่นของนักพัฒนาทุกคนและฉันมักจะเห็นว่านักพัฒนาควรจะเป็นผู้ดูแลระบบท้องถิ่นในการพัฒนา เครื่องจักรเพราะหากพวกเขาไม่ได้พวกเขาจะใช้เวลาในการหาวิธีการรับสิทธิพิเศษเหล่านั้นของเรา

และนั่นอาจเป็นเพราะคุณไม่จำเป็นต้องใส่ใจกับสถานะของการกำหนดค่าท้องถิ่นเมื่อใช้การควบคุมเวอร์ชันแบบกระจาย คุณควรใส่ใจเกี่ยวกับสถานะของการกำหนดค่าของคุณ สมมติว่าคุณกำลังใช้ git เป็นระบบควบคุมเวอร์ชันรวมศูนย์เพราะนั่นคือสิ่งที่ทุกคนทำเพราะมันง่ายที่สุดดังนั้นให้สมมติว่าการกำหนดค่า "ของคุณ" คือสำเนาของรหัสที่บันทึกไว้ในเซิร์ฟเวอร์ส่วนกลาง

หากเป็นกรณีนี้คุณไม่ควรยอมรับการรวมดังกล่าวให้หยุดการสิ้นสุดของบรรทัด crlf / lf ดังนั้นคุณบังคับว่าเมื่อบางคนพยายามลูกค้าอื่น ๆ ที่จะผลักดันการเปลี่ยนแปลงที่คุณกับตรรกะฝั่งเซิร์ฟเวอร์ที่ปฏิเสธการร้องขอที่จะก่อให้เกิดมลพิษของคุณ repo กับพวกเขาเลือกที่อาจจะหมดโวหาร


4

เราต้องการกระบวนการตรวจสอบโดยใช้คำขอดึงใน GitHub ไปยัง dev หลักหรือสาขาหลักของเรา ในระหว่างกระบวนการตรวจสอบนั้นเราจะทำเครื่องหมายคำขอดึงว่าต้องการการเปลี่ยนแปลงหากไฟล์จำนวนมากมีพื้นที่สีขาวหรือความแตกต่างของการสิ้นสุดบรรทัดและยืนยันว่าพวกเขาทำตามการจัดรูปแบบของ dev หรือสาขาหลักที่พวกเขากำลังทำคำขอดึง

นอกจากนี้ยังมีเครื่องมือที่ดีขึ้นอยู่กับภาษาที่คุณใช้และเครื่องมือ CI ที่คุณใช้ซึ่งสามารถในระหว่างกระบวนการสร้างหรือดึงขั้นตอนการร้องขออัตโนมัติจัดรูปแบบรหัสตามกฎที่คุณตั้งค่า นอกจากนี้ยังช่วยในการรักษาโค้ดให้ดูสอดคล้องและลดปัญหาการจัดรูปแบบเมื่อรับโค้ด


คุณสนใจที่จะอธิบายรายละเอียดเกี่ยวกับเครื่องมือที่คุณใช้หรือไม่? เนื่องจากมีหลายวิธีในการทำสิ่งนี้และเรามีของเราเอง แต่ยังไม่ได้นำไปใช้จริงฉันอยากรู้ว่าคุณแก้ปัญหานั้นได้อย่างไร
ndarwincorn

1
เราใช้ typescript, github และ jenkins typescript มีระบบนิเวศที่ดีสำหรับสิ่งประเภทนี้
avi

3

คุณสามารถใช้ต่อการกำหนดค่าที่เก็บเพื่อแทนที่การกำหนดค่าของผู้ใช้บนพื้นฐานต่อที่เก็บ เมื่อเสร็จแล้วบน repo ถือว่าเป็นแหล่งกลางมันควรเผยแพร่ด้วยโคลนและดึงไปยัง repos อื่น ๆ รวมถึงคนในท้องถิ่นจึงเอาชนะศูนย์กลางการกำหนดค่าท้องถิ่น

คุณสามารถบังคับใช้สิ่งนี้ผ่านhooksใน repo ส่วนกลางของคุณเพื่อตรวจสอบว่าจุดสิ้นสุดของไฟล์เป็นสิ่งที่พวกเขาควรจะเป็นและปฏิเสธการผสาน / การพุชหากไม่เป็นเพียว ๆ อย่างไรก็ตาม hooks เหล่านี้จะไม่ลอกเลียนแบบด้วย repo อย่างน้อยก็ไม่ได้โดยตรง แต่ไม่จำเป็นเนื่องจากกฎจะต้องบังคับใช้กับ repo ส่วนกลางเท่านั้น

การใช้เทมเพลตในgit init ของคุณคุณสามารถมั่นใจได้ว่า repos ของคุณถูกสร้างขึ้นเท่ากับ gitignore, gitattributes และไฟล์อื่น ๆ ทุกอย่างที่คุณต้องการ

สิ่งสุดท้ายที่ไม่เกี่ยวข้องโดยตรงกับคำถามของคุณฉันพบจุดเสียดทานที่ใหญ่ที่สุดเมื่อนำทีม svn saavy ไปยังเวิร์กโฟลว์ที่ใช้คอมไพล์สิ่งที่ทำให้พวกเขาคุ้นเคยกับ repo เสริมตรงกลาง ฉันพบว่าแผ่นคิวภาพนี้ช่วยอธิบายเล็กน้อยว่าคำสั่งใดมีผลต่อส่วนใด

หวังว่านี่จะช่วยได้เล็กน้อย

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.