Should I keep my project files under version control? [closed]


87

ฉันควรเก็บไฟล์โปรเจ็กต์เช่น. project, .classpath, .settings ของ Eclipse ภายใต้การควบคุมเวอร์ชัน (เช่น Subversion, GitHub, CVS, Mercurial ฯลฯ ) หรือไม่



12
สร้างสรรค์มาก
QED

คำตอบ:


93

คุณไม่ต้องการเก็บไว้ในการควบคุมเวอร์ชันไฟล์ตั้งค่าพกพาใด ๆ ,
ความหมาย:
ไฟล์ใด ๆ ที่ไม่มีเส้นทางที่แน่นอนในนั้น
ซึ่งรวมถึง:

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

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


@ ริช: ขอบคุณครับ. สำหรับผู้อ่านคนอื่น ๆ ดูคำตอบของ Rich สำหรับคำถามเดียวกันในหนึ่งปีต่อมา: stackoverflow.com/questions/1429125/…
VonC

3
ช่วงสำคัญ "... ไปได้ในไม่กี่นาที ... "
Eric Labashosky

3
ดังนั้นที่เก็บ VC ควรมีไฟล์ config สำหรับทุก IDE? NetBeans, Eclipse, Emacs, vi, อะไรอีกไหม? ฉันไม่เห็นด้วยอย่างยิ่งกับแนวคิดที่ว่าไฟล์เหล่านี้เนื่องจากผู้พัฒนาควรรับผิดชอบในการตั้งค่า IDE ของตนเอง
RHSeeger

3
@RH - "... ควรรับผิดชอบในการตั้งค่า IDE ของตัวเอง". ไม่เป็นไรจนกระทั่งตัวตลกบางคนลืมที่จะตั้งค่าคุณสมบัติสไตล์รหัส Eclipse ของพวกเขา .... และตรวจสอบไฟล์ต้นฉบับด้วย TABs ในนั้น กร๊ากกก !!
Stephen C

2
ฉันไม่เห็นด้วยเช่นกัน - หากคุณใช้ CI, หลายเวอร์ชัน, แพลตฟอร์ม, IDE ฯลฯ สิ่งนี้จะทำให้ DRY ค่อนข้างแย่ Esp. เนื่องจากปลั๊กอิน / การตั้งค่าต่างๆมีอิทธิพลอย่างมากต่อสิ่งที่ลงเอยที่นี่
jayshao

30

ไฟล์. project และ. classpath ใช่ อย่างไรก็ตามเราไม่เก็บการตั้งค่า IDE ไว้ในการควบคุมเวอร์ชัน มีปลั๊กอินบางตัวที่ทำงานได้ไม่ดีในการตั้งค่าต่อเนื่องและเราพบว่าการตั้งค่าบางอย่างไม่สามารถพกพาได้จากเครื่อง dev เครื่องหนึ่งไปยังอีก ดังนั้นเราจึงมีหน้า Wiki แทนซึ่งเน้นขั้นตอนที่จำเป็นสำหรับนักพัฒนาในการตั้งค่า IDE


2
-1 ฉันขอแนะนำให้ยื่นรายงานข้อผิดพลาดสำหรับปลั๊กอินเหล่านั้นแทนที่จะปล่อยให้พวกเขาเสียเวลากับผู้คนนับพัน จากนั้นฉันจะวางไฟล์การตั้งค่าที่เสถียรทั้งหมดไว้ภายใต้การควบคุมเวอร์ชันและตัดหน้า Wiki นั้นไปที่กระดูกเปล่า
Aaron Digulla

18

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

แต่ฉันใช้เครื่องมือสร้าง (Maven) ที่สามารถสร้างเวอร์ชันเริ่มต้นของไฟล์เหล่านี้เมื่อคุณทำการชำระเงินใหม่


เพื่อให้แม่นยำ: mvn eclipse: eclipse จะสร้าง. classpath และ. project ที่เหมาะสม คุณสามารถส่งผ่านมัน -DdownloadSources = true และ -DdownloadJavadocs = true
Aleksandar Dimitrov

คุณยังสามารถกำหนดค่าปลั๊กอิน eclipse ใน pom ของคุณเพื่อดาวน์โหลดซอร์สและ javadoc ได้เสมอ
Chris Vest

1
-1 ใช้งานได้ตราบเท่าที่คุณไม่เคยเปลี่ยนการตั้งค่าโครงการใน IDE ของคุณ และอันตรายคือ: หากคุณเปลี่ยนแปลงคุณจะไม่สังเกตเห็นเพราะไฟล์ไม่ได้อยู่ในเวอร์ชัน ดังนั้นฉันจึงอยากให้โหวตเรื่องนี้เป็นอย่างมาก ทำสิ่งนี้ให้กับโครงการง่ายๆอย่างที่คุณไม่ได้ตั้งใจจะแบ่งปันกับใครเท่านั้น ในทีมค่าเริ่มต้นมักจะใช้ไม่ได้และการขอให้นักพัฒนาแต่ละคนเปลี่ยนการตั้งค่าเป็นสูตรที่แน่นอนสำหรับความโกลาหล
Aaron Digulla

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

นอกจากนี้การแก้ไขข้อขัดแย้งในการผสานที่เกิดจากปลั๊กอินที่แก้ไขไฟล์เหล่านี้อย่างไม่น่าเชื่อจะค่อนข้างเร็ว
Chris Vest

7

ฉันขาดระหว่างสองตัวเลือกที่นี่

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

ในทางกลับกันฉันคิดว่าหลาย ๆ คนใช้เครื่องมือเดียวกัน (เช่น Eclipse) และบ่อยครั้งมันจะดีกว่ามากที่จะมีบางสิ่งที่เป็นมาตรฐานในเวลาออกแบบแทนที่จะใช้เวลาสร้างตัวอย่างเช่น Checkstyle มีประโยชน์มากกว่าในฐานะปลั๊กอิน Eclipse มากกว่า งาน ANT หรือ Maven - เป็นการดีกว่าที่จะสร้างมาตรฐานให้กับชุดเครื่องมือการพัฒนาและชุดปลั๊กอินทั่วไป

ฉันทำงานในโปรเจ็กต์ที่ทุกคนใช้ JDK เดียวกันเวอร์ชันเดียวกันของ Maven เวอร์ชันเดียวกันของ Eclipse ปลั๊กอิน Eclipse ชุดเดียวกันและไฟล์คอนฟิกูเรชันเดียวกัน (เช่นโปรไฟล์ Checkstyle กฎการจัดรูปแบบโค้ดเป็นต้น) สิ่งเหล่านี้ถูกเก็บไว้ในการควบคุมแหล่งที่มา - .project, .classpath และทุกอย่างในโฟลเดอร์. settings มันทำให้ชีวิตง่ายมากในช่วงเริ่มต้นของโครงการเมื่อผู้คนปรับเปลี่ยนการพึ่งพาหรือกระบวนการสร้างอย่างต่อเนื่อง นอกจากนี้ยังช่วยได้อย่างมากเมื่อเพิ่มการเริ่มต้นใหม่ในโครงการ

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

ป.ล. หากคุณใช้ Maven มีข้อโต้แย้งในการบอกว่าไฟล์. project และ. classpath เป็นสิ่งประดิษฐ์ที่ได้รับมา สิ่งนี้จะเป็นจริงก็ต่อเมื่อคุณสร้างมันทุกครั้งที่คุณสร้างและถ้าคุณไม่เคยต้องปรับแต่งด้วยมือ (หรือเปลี่ยนโดยไม่ได้ตั้งใจโดยเปลี่ยนการตั้งค่าบางอย่าง) หลังจากสร้างจาก POM


6

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


5

ไม่ฉันเป็นผู้ใช้Mavenจำนวนมากและใช้Q สำหรับ Eclipseปลั๊กอินที่สร้างและอัปเดต. project และ. classpath สำหรับสิ่งอื่น ๆ เช่นการตั้งค่าปลั๊กอินฉันมักจะพูดถึง README หรือ Wiki-page เกี่ยวกับเรื่องนั้น

นอกจากนี้สิ่งที่ฉันทำงานด้วยนั้นชอบ IDE อื่น ๆ เพียงแค่ใช้ปลั๊กอิน Maven เพื่อสร้างไฟล์ที่จำเป็นเพื่อให้ IDE (และตัวเอง) มีความสุข


5

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

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

ฉันแนะนำให้ใช้บางอย่างเช่น Maven หรือ Ant เป็นระบบสร้างมาตรฐาน นักพัฒนาทุกคนสามารถรับ classpath ที่กำหนดค่าไว้ใน IDE ได้ภายในไม่กี่วินาที


1

ได้ยกเว้นโฟลเดอร์. settings การคอมมิตไฟล์อื่น ๆ เหมาะสำหรับเรา มีคำถามที่คล้ายกันคือที่นี่


1

แม้ว่าโดยทั่วไปแล้วฉันเห็นด้วยกับแนวทาง "ไม่สร้างไฟล์เวอร์ชัน" แต่เรามีปัญหากับมันและต้องเปลี่ยนกลับ

หมายเหตุ: ฉันสนใจคำตอบของ VonCเช่นกันโดยเฉพาะอย่างยิ่งเกี่ยวกับประเด็น "รับ Eclipse ภายในไม่กี่นาที" แต่มันไม่ได้ชี้ชัดสำหรับเรา

บริบทของเราคือ Eclipse + Maven โดยใช้ปลั๊กอิน m2eclipse เรามีสภาพแวดล้อมการพัฒนาร่วมกันโดยมีไดเรกทอรีร่วมกันมากที่สุด แต่บางครั้งก็เกิดขึ้นที่บางคนอาจลองใช้ปลั๊กอินหรือเปลี่ยนแปลงสิ่งเล็กน้อยในการกำหนดค่าหรือนำเข้าพื้นที่ทำงานที่สองสำหรับสาขาอื่น ...

ปัญหาของเราก็คือการสร้าง .project จะทำเมื่อนำเข้าโครงการใน Eclipse แต่จะไม่มีการปรับปรุงในทุกกรณีในภายหลัง เป็นเรื่องน่าเศร้าและอาจไม่ถาวรเนื่องจากปลั๊กอิน m2eclipse จะดีขึ้น แต่ตอนนี้มันเป็นเรื่องจริง ดังนั้นเราจึงมีการกำหนดค่าที่แตกต่างกัน สิ่งที่เรามีในวันนี้คือ: ธรรมชาติหลายอย่างถูกเพิ่มเข้าไปในหลาย ๆ โปรเจ็กต์ในบางเครื่องซึ่งก็มีพฤติกรรมที่แตกต่างกันมาก :-(

ทางออกเดียวที่เราเห็นคือเวอร์ชันไฟล์. project (เพื่อหลีกเลี่ยงความเสี่ยงเราจะทำเช่นเดียวกันสำหรับ. classpath และ. settings) ด้วยวิธีนี้เมื่อนักพัฒนาซอฟต์แวร์รายหนึ่งเปลี่ยน pom ของเธอไฟล์ในเครื่องจะได้รับการอัปเดตโดยใช้ m2eclipse ทุกไฟล์จะทำงานร่วมกันและนักพัฒนารายอื่นจะเห็นการเปลี่ยนแปลงทั้งหมด

หมายเหตุ: ในกรณีของเราเราใช้ชื่อไฟล์แบบสัมพัทธ์ดังนั้นเราจึงไม่มีปัญหาในการแชร์ไฟล์เหล่านั้น

ดังนั้นเพื่อตอบคำถามของคุณฉันตอบตกลงยอมรับไฟล์เหล่านั้น


ฉันชอบ:


"... เปลี่ยนปอมโดยใช้ m2eclipse ... "? m2eclipse เกี่ยวข้องกับไฟล์ pom อย่างไร แน่นอนว่ามันใช้มัน แต่การเปลี่ยนแปลง pom ควรเป็นอิสระจากปลั๊กอิน
RHSeeger

@RHSeeger ขอบคุณฉันจะปรับปรุงความชัดเจนในส่วนนี้ของคำตอบของฉัน
KLE

0

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



0

เราใช้ IntelliJ IDEA และเก็บเวอร์ชัน ".sample" ของโครงการ (.ipr) และโมดูล (.iml) ไว้ภายใต้การควบคุมเวอร์ชัน

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

ข้อดีบางประการของไฟล์โครงการที่แชร์และเวอร์ชัน:

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

โปรดทราบว่าใน IDEA ไฟล์เหล่านี้มีการกำหนดค่าต่างๆเช่น dirs "source" และ "test source" คืออะไร; ทุกอย่างเกี่ยวกับการอ้างอิงภายนอก (ที่ตั้งของขวดไลบรารีรวมถึงแหล่งที่เกี่ยวข้องหรือ javadocs) ตัวเลือกการสร้าง ฯลฯ นี่คือสิ่งที่ไม่แตกต่างกันไปในแต่ละนักพัฒนาซอฟต์แวร์ (ฉันไม่เห็นด้วยกับสิ่งนี้อย่างมาก) IDEA จัดเก็บการตั้งค่า IDE ส่วนบุคคลเพิ่มเติมไว้ที่อื่นตลอดจนการกำหนดค่าปลั๊กอิน (ฉันไม่รู้จัก Eclipse นั่นดีนี่อาจจะแตกต่างกันหรือไม่ก็ได้)

ฉันเห็นด้วยกับคำตอบนี้ที่ระบุว่า:

คุณต้องสามารถโหลดโปรเจ็กต์ลงในพื้นที่ทำงานและมีทุกสิ่งที่คุณต้องการเพื่อตั้งค่าใน IDE ของคุณอย่างถูกต้องและดำเนินการได้ในไม่กี่นาที [... ] โหลดขึ้นตั้งค่าไป

และเรามีแบบนี้ขอบคุณไฟล์โปรเจ็กต์เวอร์ชัน

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