มีระบบควบคุมเวอร์ชันที่สามารถแสดงการเปลี่ยนแปลงวิธีการหรือฟังก์ชั่นที่เฉพาะเจาะจงได้หรือไม่? [ปิด]


11

บางครั้งมันจะดีที่จะพูดอะไรบางอย่างเช่น:

(git|svn|hg|etc) diff Foo.c:main
(git|svn|hg|etc) log log Foo.c:main

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

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

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

@ Robert ที่เป็นจุดที่ดีและฉันคิดว่าแรงจูงใจของฉันสำหรับการสงสัยเป็นส่วนหนึ่งเนื่องจากอย่างน้อยรหัสขยายตัวเล็กน้อย ผมตรวจสอบข้อผิดพลาดกับวิธีการที่เฉพาะเจาะจงและต้องการที่จะสามารถดูบันทึกของการเปลี่ยนแปลงไปใช้วิธีการเดียวกับที่จะดูว่ามันยากจนและ diffs เต็มรูปแบบจะไม่สะดวกเล็กน้อยเพื่อค้นหาผ่านถ้าคุณอยู่ในรีบ :)
jches

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

คำตอบ:


14
  1. เท่าที่ฉันรู้มันไม่ได้ หนึ่งอาจ แต่ฉันไม่คาดหวังว่ามันจะมีคุณภาพการผลิตถ้ามันทำ
  2. ฉันไม่คิดว่ามันใช้งานได้จริง แต่ไม่ใช่สำหรับเหตุผลที่คุณระบุไว้ มันไม่สามารถใช้งานได้จริงเพราะ VCS จะต้องมีภาษาที่รองรับการทำงานประเภทนั้น โดยพื้นฐานแล้วคุณจะต้องฝังบางสิ่งเพื่อแยกวิเคราะห์ข้อความภาษา (หนึ่งในขั้นตอนใหญ่ ๆ ที่คอมไพเลอร์ทำ) นี่เป็นการเพิ่มน้ำหนักพิเศษให้กับ VCS ของคุณซึ่งกำลังทำงานค่อนข้างซับซ้อนอยู่แล้ว
    แต่ที่สำคัญคุณต้องทำสิ่งเดียวกันกับทุกภาษาที่คุณต้องการให้การสนับสนุน VCS ที่จุดขายใช้งานได้กับรหัส C เท่านั้นจะไม่ได้รับแรงฉุดมากนัก แม้ว่าคุณจะไม่สนใจภาษาที่คลุมเครือก็ตามมันก็เป็นงานที่ยิ่งใหญ่ที่จะสนับสนุนแม้แต่ภาษา 10 อันดับแรก

และอย่างที่โรเบิร์ตชี้ให้เห็นความสามารถในการข้ามไปยังวิธีการทันทีนั้นไม่ได้ประโยชน์มากนักหากต้องข้ามไปยังวิธีการภายในเครื่องมือ diff


4
ฉันเป็นอันดับสองของการพึ่งพาภาษาและมีรหัสซ้ำซ้อนจำนวนมาก
Chander Shivdasani

1
อาร์กิวเมนต์เดียวกันสามารถทำกับโค้ดที่เน้นการแก้ไข พวกเขาต้องรู้ภาษาและมีอยู่จริง บางทีผลตอบแทนอาจจะสูงขึ้นเล็กน้อย (หน้าจอสีสันของ codez!) ฉันเห็นด้วยกับการแยกวิเคราะห์น่าจะเป็นส่วนที่ยากที่สุด มันจะไม่ยากเลยที่จะสนับสนุนภาษาที่พบบ่อยที่สุดโดยเฉพาะอย่างยิ่งเมื่อคุณไม่จำเป็นต้องวิเคราะห์โปรแกรมอย่างเต็มที่
jches

8

svn ทำอะไรบางอย่างใกล้เคียงกับสิ่งที่คุณต้องการ

คุณสามารถใช้คำสั่ง:

svn diff -x -p program.c 

-x -p ให้ชื่อฟังก์ชัน 'C' ด้านบนของชุดการเปลี่ยนแปลง ซึ่งมีลักษณะเช่นนี้

@@ -97,6 +102,8 @@ int function1(int *x)

มันไม่ได้กรอง แต่คุณสามารถ grep / ค้นหาเพื่อให้บริการวัตถุประสงค์ของคุณอย่างใกล้ชิด

ฉันเดาว่านี่เป็นเพียง 'C' (หรือ C / C ++) อย่างไรก็ตามฉันเดาว่าถ้ามีความต้องการ svn จะทำให้มันใช้ได้สำหรับภาษาอื่นเช่นกัน

ฉันไม่ได้สมัครรับการโต้แย้งที่ VCS ไม่ควรทำ ท้ายที่สุดเราต้องการให้ IDE หรือบรรณาธิการทั้งหมด (เช่น VIM, EMACS) ทำการเน้นไวยากรณ์ที่เฉพาะเจาะจงกับแต่ละภาษาและสนับสนุนจำนวนมากพร้อมกัน ดังนั้น VCS เป็นเครื่องมือสำหรับนักพัฒนาควรสนับสนุนฟังก์ชั่นดังกล่าว

แน่นอนขอบคุณคำถามของคุณที่ฉันค้นพบมัน ฉันไม่เคยใช้มันมาก่อน


1

โดยไม่ต้องเจาะจง ... แต่คุณอาจไปที่ไซต์Semantic Designsและผลิตภัณฑ์ของพวกเขา พวกเขามีเครื่องมือบางอย่างที่มีความอ่อนไหวทางภาษาดังนั้นจึงพูดได้ว่าไม่มีคำศัพท์ที่ดีกว่า



-1

หากต้องการแสดงสิ่งที่ผู้แก้ไขและผู้แก้ไขแก้ไขล่าสุดแต่ละบรรทัดของไฟล์:

git blame filename

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

การควบคุมเวอร์ชันไม่ทราบรายละเอียดเกี่ยวกับไวยากรณ์และยังไม่สนใจประเภทของไฟล์
Ghita

-1

ENVYและStOREทั้งสองทำเช่นนั้น เป็นที่น่าสนใจเช่นเดียวกับ Monicello ที่ Logan Capaldo กล่าวถึงข้างต้นสิ่งเหล่านี้ก็มีไว้สำหรับ Smalltalk ด้วยเช่นกัน

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