เป็นความคิดที่ดีหรือไม่ที่จะเรียกใช้ตัวจัดรูปแบบรหัสเป็นระยะในที่เก็บ?


68

ฉันกำลังคิดที่จะสร้างงาน cron ที่ตรวจสอบรหัสเรียกใช้ตัวจัดรูปแบบโค้ดบนมันและหากมีสิ่งใดเปลี่ยนแปลงไปก็ให้ยอมรับการเปลี่ยนแปลงและผลักพวกเขากลับมา

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

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


105
มีข้อผิดพลาดทางตรรกะที่นี่ วิธีนี้จะไม่สนับสนุนให้ผู้คนเขียนโค้ดที่มีรูปแบบเหมาะสม ค่อนข้างจะสนับสนุนให้คนไม่จัดรูปแบบและพึ่งพาระบบแทน! หากความกังวลของคุณคือรหัสฐานที่สอดคล้องกันก็ไม่เป็นไร เป้าหมายของคุณคือฝึกให้โคเดอร์เขียนอย่างหมดจดมันเป็นข้อผิดพลาดครั้งใหญ่
Kilian Foth

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

13
ฉันมีปัญหาเกี่ยวกับการจัดรูปแบบอัตโนมัติไม่ได้รับการอัปเดตอย่างถูกต้องและทำลายรหัสของฉัน สิ่งที่ต้องจำไว้
isaacg

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

18
นี่เป็นความคิดที่ยอดเยี่ยมหากเป้าหมายของคุณคือให้คนอื่นเกลียดคุณ ทำได้น้อยมาก แต่จะทำให้เกิดปัญหาที่คาดไม่ถึง
TonyK

คำตอบ:


130

ฟังดูดี แต่ฉันต้องการให้คนที่รับผิดชอบในการยอมรับการเปลี่ยนแปลงรหัสไม่ใช่บอท

นอกจากนี้คุณต้องแน่ใจว่าการเปลี่ยนแปลงเหล่านั้นไม่ทำลายอะไรเลย ตัวอย่างเช่นเรามีกฎที่สั่งซื้อคุณสมบัติและวิธีการตามตัวอักษร สิ่งนี้สามารถส่งผลกระทบต่อฟังก์ชันการทำงานตัวอย่างเช่นลำดับของข้อมูลและวิธีการในไฟล์ WSDL ของสัญญา WCF


50
นอกจากนี้ยังเป็นการแบ่ง VCS คุณจะไม่สามารถรู้ได้ว่าใครเป็นคนเขียนบรรทัดด้วยการตำหนิได้ง่ายและหากมีข้อขัดแย้ง VCS ของคุณจะไม่สามารถรู้ได้ว่าการเปลี่ยนแปลงของเครื่องมือนั้นมีสไตล์และควรทิ้งทุกครั้ง
Pierre.Sassoulas

2
หัวข้อที่เกี่ยวข้องเป็นรูปเป็นร่างบังคับให้ "บันทึกการกระทำ" บางอย่างใน IDE เช่นทำให้ฟิลด์สุดท้ายถ้าเป็นไปได้ มันเป็นปัญหาเพราะ (อย่างน้อยใน Java) เฟรมเวิร์กจำนวนมากตั้งค่าผ่านการสะท้อน (เช่น Spring และ Hibernate)
Captain Man

20
@JeffO git blameไม่เพียง แต่จะพบว่ามีข้อบกพร่องที่ผิดพลาดเท่านั้น แต่เป็นการค้นหาการกระทำเมื่อมีการเพิ่ม / ลบสิ่งซึ่งมีประโยชน์ด้วยเหตุผลหลายประการ
Pokechu22

2
"เรามีกฎที่สั่งซื้อคุณสมบัติและวิธีการตามตัวอักษร" เด็กชายที่ฟังดูน่ากลัว! คุณจะต้องมีความหวังอย่างต่อเนื่องทั่วทุกมุมไฟล์
อเล็กซานเดอร์

1
นอกจากนี้สำหรับ Java การรวมกันของตัวตรวจสอบสไตล์ซึ่งมองหาการสืบทอดจากสไตล์ที่ตกลงกันไว้ (อาจทำให้เป็นคำเตือนการคอมไพล์) และ IDE ที่กำหนดค่าสำหรับการจัดรูปแบบสไตล์ที่ตกลงกันไว้นั้นทำให้ง่ายต่อการตรวจจับและแก้ไข มันเป็นสิ่งสำคัญที่รหัสจะตัดสิน (สำหรับการขาดคำที่ดีกว่า) เมื่อมันเปลี่ยนฟังก์ชั่นจริง - ไม่ใช่เมื่อบอทฟอร์แมตมัน
Thorbjørn Ravn Andersen

72

ฉันจะพยายามทำให้เป็นเรื่องง่ายสำหรับทุกคนในทีมที่จะใช้การจัดรูปแบบรหัสอัตโนมัติตามมาตรฐานของทีมของคุณโดยตรงภายในโปรแกรมแก้ไขหรือ IDE ของคุณไปยังไฟล์ซอร์สโค้ดปัจจุบัน (หรือบางส่วนที่เลือก) วิธีนี้จะช่วยให้สมาชิกในทีมของคุณสามารถควบคุมวิธีการและเวลาในการจัดรูปแบบได้มากขึ้นให้พวกเขาตรวจสอบรหัสก่อนที่จะส่งมอบในรูปแบบสุดท้ายและทดสอบหลังจากการจัดรูปแบบเกิดขึ้นไม่ใช่ก่อนหน้า

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


7
"ฟอร์แมตมือที่คุณมั่นใจ 100% ว่ามันจะไม่ทำลายอะไร" - เมื่อคุณเคยใช้รหัสที่คุณเป็นจริง 100% จะไม่มีวันแตกหักเมื่อไหร่?
Zibbobz

2
@Zibbobz: เครื่องมือใด ๆ ที่เราใช้ในการแก้ไขโค้ดเพื่อคอมไพล์และเชื่อมโยงมันและ VCS ยังสามารถมีข้อบกพร่อง แต่ก็ไม่ได้หยุดเราพยายามที่จะพัฒนาโปรแกรมทำงาน ;-) แต่ดูการแก้ไขของฉัน
Doc Brown

ฉันอนุมัติการแก้ไขถ้าเพียงเพราะความระมัดระวังเป็นออนซ์มีค่าหนึ่งปอนด์ของการแก้จุดบกพร่อง ;)
Zibbobz

@Zibbobz ค่อนข้างบ่อย! โปรดทราบว่าการแน่ใจ 100% ของบางสิ่งไม่ได้หมายความว่ามีโอกาส 100% ที่จะเป็นจริง
user253751

@immibis: คุณอาจพลาดความเห็นที่อ้างถึงประโยคที่ฉันลบออกจากคำตอบของฉันเมื่อหลายวันก่อน
Doc Brown

37

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


10
ฉันคิดว่าถ้าเขาพูดถึงการมีบอทตรวจสอบสิ่งต่างๆเข้าและออกจากที่เก็บ VCS จะได้รับหรือไม่
StarWeaver

11
@ StarWeaver คุณคิด แต่ฉันได้ทำงานในสถานที่ที่ "รหัสพื้นที่เก็บข้อมูล" เป็นไดเรกทอรีที่ป้องกันสามารถเข้าถึงได้โดยชิ้นส่วนของซอฟต์แวร์ที่ทำงานภายใต้บัญชีผู้ใช้ของตัวเองไม่มีการควบคุมเวอร์ชันเลยยกเว้นการสำรองข้อมูลรายสัปดาห์ของไดเรกทอรีภายใต้ชื่อไดเรกทอรีบันทึกเวลา
jwenting

14
นั่นคือ…ฉันจะไปฝันร้ายแล้ว>.>
StarWeaver

7
@StWeWeaver ทำไมคุณถึงคิดว่าฉันยังจำสภาพแวดล้อมที่ 14 ปีต่อมา;)
jwenting

28

ฉันมักจะเชื่อว่ามันเป็นความคิดที่ดี (ในการรันตัวจัดรูปแบบโค้ดโดยอัตโนมัติ) แต่นั่นเป็นเพียงความคิดเห็นของฉัน

ฉันจะไม่เรียกใช้มันเป็นระยะ ๆ แต่ถ้าเป็นไปได้ก่อนที่จะส่งการควบคุมเวอร์ชัน

เมื่อใช้คอมไพล์แล้วการทำเบ็ดล่วงหน้าที่ทำนั้นจะเป็นประโยชน์ ในโครงการ C หรือ C ++ หลายโครงการที่สร้างด้วยMakefileบางตัวฉันกำลังเพิ่มindentเป้าหมาย (ซึ่งเรียกใช้ตัวจัดรูปแบบโค้ดที่เหมาะสมเช่นindentหรือastyle) และคาดว่าผู้มีส่วนร่วมจะทำงานmake indentเป็นประจำ BTW คุณสามารถเพิ่มmakeกฎบางอย่างเพื่อให้แน่ใจว่ามีการติดตั้ง git hooks (หรือเพื่อติดตั้ง)

แต่จริงๆมันเป็นมากกว่าสังคมปัญหากว่าเทคนิคหนึ่ง คุณต้องการให้ทีมของคุณส่งมอบโค้ดที่สะอาดและจัดรูปแบบได้ดีนั่นเป็นกฎทางสังคมของโครงการของคุณ (ไม่มีคำตอบทางเทคนิคสำหรับปัญหาสังคมทุกปัญหาเสมอไป)

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

BTW ชุมชนที่แตกต่างและภาษาการเขียนโปรแกรมที่แตกต่างกันมีมุมมองที่แตกต่างกันในการจัดรูปแบบโค้ด ตัวอย่างเช่นGoมีสไตล์การจัดรูปแบบโค้ดเพียงอย่างเดียว แต่ C หรือ C ++ มีรูปแบบมากมาย


ถูกต้อง แต่นั่นหมายความว่านักพัฒนาซอฟต์แวร์ทุกคนต้องติดตั้ง commit hook
bigblind

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

ใช่แล้วคุณกำลังบอกว่ากฎทางสังคมของการติดตั้ง git hook นั้นดีกว่าระบบอัตโนมัติที่ทำหรือไม่ (คำถามที่จริงจังไม่ได้หมายถึงวาทศิลป์เสียงยากที่จะสื่อบนอินเทอร์เน็ต :))
bigblind

15
ใช่ฉันกำลังพูดอย่างนั้น
Basile Starynkevitch

17

ฉันคิดว่ามันเป็นความคิดที่ไม่ดี คำตอบหลายข้อได้กล่าวไปแล้วว่ามันทำให้ประวัติศาสตร์สกปรกด้วยการทำให้ยากที่จะตอกย้ำว่าใครเป็นผู้เพิ่มบรรทัดและสนับสนุนให้คนทำอะไรและฟอร์แมตบ็อตจะจัดการกับมัน

วิธีที่ดีกว่าคือการรวมเครื่องมือตรวจสอบรูปแบบไว้ในเครื่องมือสร้างของคุณ (ใน Java มีCheckstyle ) จากนั้นอนุญาตให้ผู้ใช้รวมสาขาของตนเข้ากับสาขาหลักเท่านั้นหากบิลด์บิลด์ (รวมถึงการจัดรูปแบบ)

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


2
แต่ตรวจสอบให้แน่ใจว่าตัวตรวจสอบรูปแบบมีเหตุผลและไม่บังคับใช้สิ่งแปลก ๆ ที่ต่อต้านการปฏิบัติ (และยอมรับ) ใด ๆ ที่ยอมรับ (และใช่ฉันเคยเห็นมาแล้ว) จากนั้นคุณสามารถให้เซิร์ฟเวอร์บิลด์มีบิลด์อัตโนมัติล้มเหลวเมื่อตัวตรวจสอบลักษณะเกิดข้อผิดพลาด (ใหม่)
jwenting

2
ฉันเคยเห็นหลายกรณีที่การจัดรูปแบบอัตโนมัติสร้างรหัสที่อ่านไม่ได้ โดยเฉพาะอย่างยิ่งสำหรับ parens ปิดจำนวนมาก (มันเป็นความรู้สึกที่ดีที่จะทิ้งบางส่วนไว้ในบรรทัดแยกกัน แต่หุ่นยนต์ไม่สนใจ) อีกตัวอย่างหนึ่งคือการแยกสตริง Java แบบยาวโดยอัตโนมัติ (มีความยาวเนื่องจากมีคิวรี SQL แต่หุ่นยนต์ไม่มีความคิด)
18446744073709551615

@ 18446744073709551615 ฉันไม่ได้บอกการจัดรูปแบบอัตโนมัติฉันบอกอัตโนมัติตรวจสอบ กฎของคุณอาจยอมให้สิ่งเหล่านั้น
Captain Man

16

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

ในหลอดเลือดดำเดียวกับคำแนะนำของ @ BasileStarynkevitch เราใช้ hooks การรับหลังการรับ git ของเซิร์ฟเวอร์เพื่อส่ง "อีเมลคำแนะนำ" เกี่ยวกับรูปแบบโค้ด

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

หากเป็นปัญหาของระบบที่เป็นอันตรายต่อ codebase อาจถึงเวลาที่จะเริ่มต้นนำเสนอปัญหาเกี่ยวกับสไตล์โค้ดในบทวิจารณ์โค้ด รูปแบบรหัสไม่ดีอาจปกปิดข้อบกพร่องและทำให้อ่านรหัสยากขึ้นดังนั้นจึงอาจเป็นปัญหาในการตรวจสอบรหัสที่ถูกต้อง

ในการเพิ่มปัญหา "สังคม" ของสิ่งต่าง ๆ มันเป็นเรื่องที่คุ้มค่าที่จะสนับสนุนให้คนแก้ไขข้อบกพร่องด้านเครื่องสำอางและโวหารเมื่อพบพวกเขา เรามีข้อความยืนยันมาตรฐาน "เครื่องสำอาง" สำหรับการแก้ไขรูปแบบโค้ดที่ผู้พัฒนารายอื่นรู้ไม่มีการเปลี่ยนแปลงที่ทำให้แตก

ดังที่ @DocBrown พูดตัวเลือกอื่นคือบังคับใช้รูปแบบโค้ดภายใน IDE ของคุณ เราใช้CodeMaidกับ Visual Studio เพื่อแก้ไขข้อผิดพลาดสไตล์ทั่วไปมากมาย มันจะทำงานเมื่อบันทึกไฟล์รหัสซึ่งหมายความว่าโค้ดที่ไม่ดีไม่ควรทำให้เป็น repo ... ในทางทฤษฎี :-)


ฉัน upvoting อันนี้เพราะมันอยู่ทั้งสองด้านโดยตรง (ปรารถนาให้รหัสที่ดีกว่า + ความปลอดภัยจากการทำลายโครงสร้าง) หลังจากฐานรหัสอยู่ในเกณฑ์ดีจริง ๆ ฉันจะถือว่า "ความคิดที่ไม่ดี" เป็นถ้อยคำที่ค่อนข้างแรงสำหรับการเปลี่ยนแปลงในอนาคตโดยอัตโนมัติ
donjuedo

10

ใช่ฉันคิดว่ามันเป็นความคิดที่ไม่ดี อย่าเข้าใจฉันผิดเหตุผลที่ทำให้มันฟังดูดี แต่ผลที่ได้ยังน่ากลัวอยู่

คุณจะมีการรวมความขัดแย้งเมื่อดึงสาขาที่ถูกติดตามอย่างน้อยฉันก็กลัวว่าจะเป็นกรณีนี้ฉันอาจผิด

ฉันไม่ต้องการทดสอบตอนนี้ที่ทำงาน แต่คุณควรลองด้วยตัวเอง

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

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

แต่คุณสามารถใส่มันลงในงานสร้างทุกคืนหรืองานสร้างรายสัปดาห์

แต่แม้กระทั่งทุกคืนอาจเป็นความคิดที่ไม่ดี

คุณสามารถเรียกใช้ได้ทุกสัปดาห์เมื่อคุณแน่ใจว่าจะไม่มีข้อขัดแย้งในการผสานเกิดขึ้นเพราะทุกอย่างเสร็จสิ้นในวันจันทร์

มิฉะนั้นให้เรียกใช้ปีละ 1-2 ครั้งในช่วงเทศกาลวันหยุดเมื่อมีข้อขัดแย้งที่เกิดขึ้นจะไม่เกิดขึ้น

แต่โซลูชันอาจขึ้นอยู่กับลำดับความสำคัญของคุณสำหรับรูปแบบโค้ด

ฉันคิดว่าการสร้างสคริปต์การตั้งค่าที่สร้างที่เก็บ git โดยอัตโนมัติและตั้งค่า hooks สำหรับโครงการจะดีกว่า

หรือคุณอาจรวมสคริปต์การตั้งค่า hook ไว้ในโฟลเดอร์สำหรับ devs ของคุณภายในโครงการและเพียงตรวจสอบมันเข้าไปในคอมไพล์เอง


7

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


เห็นด้วยอย่างสิ้นเชิง. ตัวอย่างเช่นการจัดตำแหน่งตัวบ่งชี้ตัวแปรทางด้านซ้ายเครื่องหมายเท่ากับทั้งหมดในคอลัมน์เดียวและค่าทั้งหมดทางด้านขวาของเครื่องหมายเท่ากับ ตัวจัดรูปแบบจะลดค่าความสามารถในการอ่านในกรณีนี้โดยลดแท็บ / ช่องว่างแต่ละอันให้เป็นช่องว่างเดียว แน่นอนว่าสามารถเขียนกฎของตัวจัดรูปแบบเพื่อป้องกันสิ่งนี้ได้ แต่คุณต้องมีนักพัฒนาที่ได้รับมอบหมายเพียงเพื่อเขียนรหัสตัวจัดรูปแบบ ดูเหมือนความคิดที่ไม่ดีรอบตัว นำมาใช้ดีกว่าอนุสัญญาภายในและบังคับใช้ในระหว่างการตรวจสอบโค้ด
ThisClark

7

มันเป็นความคิดที่น่ากลัว

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

หากคุณต้องการทำสิ่งนี้เป็นประจำนั่นเป็นเรื่องที่น่ากลัวมาก

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

แล้วก็มีปัญหาสังคม มีคนที่ต้องการบังคับให้ทุกคนใช้สไตล์โค้ดของพวกเขาและมีคนที่ยืดหยุ่นมากกว่า สิ่งนี้น่าจะได้รับการแนะนำโดยนักพัฒนาประเภท "grammer-nazi" (การสะกดคำโดยเจตนา) ที่ต้องการบังคับสไตล์ของพวกเขาให้กับคนอื่น คาดหวังฟันเฟืองและคาดหวังว่านักพัฒนาซอฟต์แวร์ที่มีความยืดหยุ่นและใช้งานง่ายจะวางเท้าลง


4

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


นี่คือสิ่งที่ Go ทำเช่นยกเว้นการใช้ Mercurial การกดบางสิ่งที่ไม่แปรเปลี่ยนไปgo fmtจะถูกปฏิเสธโดยอัตโนมัติ
Jörg W Mittag

1

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


1

ความคิดนี้คล้ายกับคำตอบอื่น ๆ แต่ฉันไม่สามารถแสดงความคิดเห็นคำแนะนำของฉัน

ทางเลือกหนึ่งคือการตั้งค่านามแฝง (หรือตะขอหรืออะไรก็ได้) ไปยังฟังก์ชั่นการกระทำที่ใช้ฟอร์แมตโค้ดบนโค้ดที่ต้องถูกยืนยันก่อนที่จะถูกคอมมิต

อาจมีผลลัพธ์ 2 (หรือมากกว่า):

1) แสดงการเปลี่ยนแปลงที่เสนอให้กับผู้ใช้และขอการอนุมัติของพวกเขาเพื่อนำไปใช้และยอมรับการเปลี่ยนแปลง

2) ละเว้นการเปลี่ยนแปลงที่เสนอและส่งรหัสต้นฉบับ

คุณสามารถเพิ่มความยืดหยุ่นให้กับตัวเลือกเหล่านี้เช่นความสามารถในการแก้ไขการเปลี่ยนแปลงที่เสนอในตัวเลือกที่ 1 ความคิดอื่น (ขึ้นอยู่กับว่าคุณต้องการผลักดันมาตรฐานการเข้ารหัสเหล่านี้ยากเพียงใด) คือการให้ระบบส่งรายงานบางประเภทเมื่อคุณ ตัวเลือก 2 ถูกเลือก

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


0

ฉันจะไม่ทำมันบนพื้นที่เก็บข้อมูล แต่ฉันจะทำมันในบันทึกถ้าเครื่องมือรองรับ Eclipse เป็นหนึ่งและนอกจากนี้ฉันจะทำการล้างข้อมูลโค้ดรวมถึงการเรียงลำดับ

ส่วนที่ดีคือมันเป็นส่วนหนึ่งของโครงการดังนั้นนักพัฒนาทุกคนจะได้รับมันสำหรับโครงการของพวกเขา

การรวมโบนัสเพิ่มเติมจะง่ายขึ้นอย่างมากเนื่องจากสิ่งต่างๆจะไม่กระโดดไปมา

การตรวจสอบรหัสจะป้องกันการกระทำผิดพลาดใด ๆ

อีกที่หนึ่งที่ฉันอยากทำคือมีส่วนของสิ่งก่อสร้าง ในกรณีของฉันฉันมีมันที่ maven builds จะทำการฟอร์แมต XML และล้างไฟล์ pom และฟอร์แมตโค้ดใหม่

ด้วยวิธีนี้เมื่อนักพัฒนาซอฟต์แวร์พร้อมที่จะผลักดันทุกคนจะได้รับการทำความสะอาดสำหรับคำขอการดึง

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