บังคับใช้สำหรับผู้ใช้ Git? [ปิด]


173

มีเอกสาร "Git สำหรับผู้ใช้ Perforce" จำนวนมากอยู่ที่นั่น แต่ดูเหมือนจะตรงกันข้ามน้อยมาก

ก่อนหน้านี้ฉันเคยใช้ Git มาก่อนและเพิ่งเริ่มงานที่ฉันต้องใช้ Perforce บ่อยๆและพบว่าตัวเองสับสนมากตลอดเวลา แนวคิดที่ฉันคุ้นเคยจาก Git ดูเหมือนจะไม่แม็พกับ Perforce เลย

มีใครสนใจที่จะรวบรวมเคล็ดลับในการใช้ Perforce สำหรับคนที่คุ้นเคยกับ Git หรือไม่?

คำตอบ:


334

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

บทนำสู่ Perforce สำหรับผู้ใช้ Git

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

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

หากคุณไม่สามารถโน้มน้าวให้ผู้ดูแลระบบของคุณติดตั้ง Git Fusion ได้ Git นั้นมาพร้อมกับ Perforce binding ที่เรียกว่า Git-P4 ซึ่งอนุญาตให้คุณใช้ Git เพื่อเปลี่ยนและส่งไฟล์ในพื้นที่ทำงาน Perforce ข้อมูลเพิ่มเติมเกี่ยวกับสิ่งนั้นสามารถดูได้ที่: https://git.wiki.kernel.org/index.php/GitP4

ยังอยู่ที่นี่? ดีมาดูที่เพอร์ฟอร์ซ

ความแตกต่างของคำศัพท์เพื่อเรียงลำดับ

ก่อนที่เราจะลงรายละเอียดเราต้องสรุปความแตกต่างของคำศัพท์ระหว่าง Git และ Perforce อย่างย่อ

ประการแรกคือการเช็คเอาท์ ใน Git นี่คือวิธีที่คุณได้รับสำเนาของรหัสจากสาขาที่กำหนดไว้ในพื้นที่ทำงานของคุณ ใน Perforce เราเรียกสิ่งนี้ว่าการซิงค์จากบรรทัดคำสั่งหรือจาก GUI P4V ของเรา "รับการแก้ไขล่าสุด" Perforce ใช้การชำระเงินคำจาก P4V หรือp4 editจากบรรทัดคำสั่งเพื่อหมายความว่าคุณวางแผนที่จะเปลี่ยนไฟล์จากระบบควบคุมเวอร์ชัน ในส่วนที่เหลือของเอกสารนี้ฉันจะใช้การชำระเงินในความหมายของคำ

ประการที่สองคือ Git กระทำเมื่อเทียบกับความจำเป็นส่ง คุณจะส่งมอบที่ไหนใน Git git pushถูกว่าการดำเนินการทั้งหมดที่เกิดขึ้นกับบริการเวอร์ชันอย่างเลี่ยงไม่พ้นที่ใช้ร่วมกันอย่างเลี่ยงไม่ได้เทียบเท่า ในทำนองเดียวกันเราไม่ได้มีpull; คำสั่ง sync จากด้านบนดูแลการรับไฟล์ให้เรา ไม่มีแนวคิดของการส่งในพื้นที่อย่างแท้จริงใน Perforce เว้นแต่ว่าคุณเลือกที่จะใช้เครื่องมือ P4Sandbox ของเราที่อธิบายไว้ด้านล่างโดยย่อ

แนวคิดหลักในการบังคับอย่างง่าย

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

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

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

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

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

ทำไมพื้นที่ทำงาน

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

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

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

สำหรับข้อมูลเพิ่มเติมเกี่ยวกับอำนาจเต็มของพื้นที่ทำงานอย่างเลี่ยงไม่พ้นอ่านการกำหนดค่า P4

การชำระเงินอย่างชัดแจ้งกับการชำระเงินโดยนัย

หนึ่งในความท้าทายที่ยิ่งใหญ่ที่สุดสำหรับผู้ใช้ที่ย้ายจาก Git ไปยัง Perforce คือแนวคิดของการชำระเงินที่ชัดเจน หากคุณคุ้นเคยกับขั้นตอนการเปลี่ยนไฟล์ของ Git / SVN / CVS แล้วบอกให้ระบบควบคุมเวอร์ชันมองหาสิ่งที่คุณทำมันอาจเป็นการเปลี่ยนแปลงที่เจ็บปวดอย่างยิ่ง

ข่าวดีก็คือถ้าคุณเลือกคุณสามารถทำงานกับเวิร์กโฟลว์สไตล์ Git ใน Perforce ใน Perforce คุณสามารถตั้งค่าตัวเลือก "allwrite" บนพื้นที่ทำงานของคุณ สิ่งนี้จะบอก Perforce ว่าควรเขียนไฟล์ทั้งหมดลงดิสก์ด้วยชุดบิตที่เขียนได้ จากนั้นคุณสามารถเปลี่ยนไฟล์ใด ๆ ที่คุณต้องการโดยไม่ต้องบอก Perforce อย่างชัดเจน ในการให้ Perforce ปรับการเปลี่ยนแปลงเหล่านั้นให้เรียบร้อยคุณสามารถเรียกใช้ "สถานะ p4" มันจะเปิดไฟล์สำหรับเพิ่มแก้ไขและลบตามความเหมาะสม เมื่อทำงานด้วยวิธีนี้คุณจะต้องใช้ "p4 update" แทนที่จะเป็น "p4 sync" เพื่อรับการแก้ไขใหม่จากเซิร์ฟเวอร์ "p4 update" ตรวจสอบการเปลี่ยนแปลงก่อนทำการซิงค์ดังนั้นจะไม่ปิดบังการเปลี่ยนแปลงในเครื่องของคุณหากคุณยังไม่ได้เรียกใช้ "สถานะ p4"

ทำไมต้องชำระเงินอย่างชัดเจน?

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

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

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

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

หากคุณใช้ IDE สำหรับการพัฒนาเช่น Visual Studio หรือ Eclipse ฉันขอแนะนำให้ติดตั้งปลั๊กอิน Perforce สำหรับ IDE ของคุณ ปลั๊กอิน IDE ส่วนใหญ่จะทำการเช็กเอาต์ไฟล์โดยอัตโนมัติเมื่อคุณเริ่มแก้ไขโดยไม่ต้องทำการเช็คเอาต์ด้วยตัวเอง

บังคับแทนสำหรับคุณสมบัติ Git

  • git stash ==> p4 shelve
  • git local branching ==> Perforce racks หรือสาขางาน
  • git blame==> p4 annotateหรือPerforce Timelapse Viewจาก GUI

การทำงานตัดการเชื่อมต่อ

มีสองตัวเลือกสำหรับการยกเลิกการเชื่อมต่อการทำงานจากบริการกำหนดเวอร์ชันของ Perforce (นั่นคือคำศัพท์ที่ยอดเยี่ยมของเราสำหรับเซิร์ฟเวอร์ Perforce)

1) ใช้ P4Sandbox เพื่อให้มีเวอร์ชั่นในท้องถิ่นและการแตกสาขา

2) แก้ไขไฟล์ตามที่คุณต้องการและใช้ 'สถานะ p4' เพื่อบอกถึงสิ่งที่คุณได้ทำ

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

บังคับด่วน

ตัวอย่างต่อไปนี้ทั้งหมดจะผ่านทางบรรทัดคำสั่ง

1) กำหนดค่าการเชื่อมต่อของคุณกับ Perforce

export P4USER=matt
export P4CLIENT=demo-workspace
export P4PORT=perforce:1666

คุณสามารถติดการตั้งค่าเหล่านี้ในไฟล์ shell config ของคุณใช้p4 setเพื่อบันทึกการตั้งค่าในWindows และ OS X หรือใช้ไฟล์ Perforce config

1) สร้างพื้นที่ทำงาน

p4 workspace

# set your root to where your files should live:
Root: /Users/matt/work

# in the resulting editor change your view to map the depot files you care about
//depot/main/... //demo-workspace/main/...
//depot/dev/...  //demo-workspace/dev/...

2) รับไฟล์จากเซิร์ฟเวอร์

cd /Users/matt/work
p4 sync

3) ชำระเงินไฟล์ที่คุณต้องการทำงานและแก้ไข

p4 edit main/foo; 
echo cake >> main/foo

4) ส่งไปยังเซิร์ฟเวอร์

p4 submit -d "A trivial edit"

5) เรียกใช้p4 help simpleเพื่อดูคำสั่งพื้นฐานที่คุณจะต้องใช้กับ Perforce


5
ภาพรวมที่ยอดเยี่ยม ฉันจะบันทึก (หรือโพสต์ผลลัพธ์บนเว็บไซต์) นี้เพื่อมอบให้กับพนักงานใหม่ของเรา
Caleb Huitt - cjhuitt

@Matt กล่าวว่า "มาจาก Git มันง่ายที่จะรู้สึกว่าแนวคิดของพื้นที่ทำงานทั้งหมดมีปัญหามากกว่าที่ควรค่า" อาจเป็นไปได้ - แต่ฉันทำแผนที่ใน RCS และ CVS มาหลายปีแล้ว ไม่ได้ใช้โมดูล CVS แต่ด้วยการสร้างแผนผังของ symlink ที่ชี้ไปที่ repos CVS หนึ่งรายการขึ้นไป ต้นไม้ที่กระจัดกระจายไม่ได้มีไดเรกทอรีทั้งหมด ด้วยเหตุผลที่คุณอธิบายถึง Perforce ให้ทำเช่นนั้น อาจเป็นความเจ็บปวดในการรักษาสิ่งนี้ใน CVS (และคอมไพล์, hg, และ bzr ... ไม่แน่ใจเกี่ยวกับ bzr.)
Krazy Glew

ขอบคุณ Matt การอ่านที่มีประโยชน์มหาศาล ผมยังคิดว่าระบบเวอร์ชันควรจะบอกฉันว่าฉันมีการเปลี่ยนแปลงในประเทศในการเปรียบเทียบกับ repo ระยะไกลหรือระหว่างสาขาและไม่วิธีอื่น ๆ :)
jupp0r

1
แน่นอน! โชคดีที่คุณสามารถทำได้ด้วย Perforce ฉันไม่ได้ใช้งาน 'p4 edit' เป็นเวลาหลายปี perforce.com/blog/131112/say-goodbye-p4-edit
แมตต์

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

24

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

  • ในคอมไพล์สิ่งที่เป็นนามธรรมคือแพทช์ (aka diff, aka changeset) การคอมมิตในคอมไพล์คือเอาต์พุตของการรันdiffระหว่างสถานะก่อนหน้าและสถานะปัจจุบันของไฟล์ที่ถูกคอมมิต
  • อย่างเลี่ยงไม่พ้นในนามธรรมเป็นไฟล์ การคอมมิทใน p4 เป็นเนื้อหาทั้งหมดของไฟล์ในการคอมมิท ณ เวลานั้น สิ่งนี้ถูกจัดระเบียบเป็นรายการการเปลี่ยนแปลง แต่การแก้ไขจะถูกจัดเก็บแบบต่อไฟล์และรายการการเปลี่ยนแปลงจะรวบรวมการแก้ไขไฟล์ต่าง ๆ เข้าด้วยกัน

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

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


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

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

จำเป็นต้องทำรายการการเปลี่ยนแปลง (ชุดการเปลี่ยนแปลง) ต่อไปนี้เป็นคำถาม Stack Overflow ที่พูดถึง stackoverflow.com/questions/6158916/perforce-merge-changelist/
......

5
@ Br.Bill อีกครั้งจุดที่ฉันทำไม่ใช่ว่า P4 สามารถทำสิ่งต่าง ๆ ได้หรือไม่ (เพราะแน่นอน!) ประเด็นคือเกี่ยวกับสิ่งที่เป็นนามธรรมนั่นคือรูปแบบที่ผู้ใช้ต้องการภายในเพื่อที่จะเข้าใจว่ามันทำงานอย่างไร
เมียน

1
ขอบคุณสำหรับสิ่งนี้. มันจะอธิบายวิธีที่เราสามารถรับไฟล์ล่าสุดโดยเฉพาะได้อย่างไรเราจะได้รับรายการเปลี่ยนแปลงเฉพาะได้อย่างไร นี่คือส่วนที่สับสนที่สุดสำหรับฉันเมื่อฉันมาจากคอมไพล์
Abdulsattar Mohammed

20

อาจมีเอกสารไม่มากนักเนื่องจาก Perforce เป็นระบบควบคุมการแก้ไขแบบดั้งเดิม (ใกล้กับ CVS, การโค่นล้ม ฯลฯ ) และโดยทั่วไปถือว่ามีความซับซ้อนน้อยกว่าระบบควบคุมการแก้ไขแบบกระจายรุ่นใหม่

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

  1. ทำงานp4 editกับแต่ละไฟล์ที่คุณต้องการแก้ไข คุณจำเป็นต้องบอก Perforce ว่าไฟล์ใดที่คุณกำลังแก้ไข p4 addหากคุณกำลังเพิ่มไฟล์ใหม่ใช้ p4 deleteหากคุณลบไฟล์ที่ใช้
  2. ทำการเปลี่ยนแปลงรหัสของคุณ
  3. เรียกใช้p4 changeเพื่อสร้างเซ็ตการแก้ไข ที่นี่คุณสามารถสร้างคำอธิบายการเปลี่ยนแปลงของคุณและเลือกที่จะเพิ่มหรือลบไฟล์ออกจากเซ็ตการแก้ไขของคุณได้เช่นกัน คุณสามารถเรียกใช้p4 change CHANGE_NUMBERเพื่อแก้ไขคำอธิบายได้ในภายหลังหากจำเป็น
  4. คุณสามารถทำการเปลี่ยนแปลงรหัสเพิ่มเติมได้ถ้าต้องการ หากคุณจำเป็นต้องเพิ่ม / แก้ไข / ลบไฟล์อื่น ๆ p4 {add,edit,delete} -c CHANGE_NUMBER FILEที่คุณสามารถใช้
  5. เรียกใช้p4 syncเพื่อดึงการเปลี่ยนแปลงล่าสุดจากเซิร์ฟเวอร์
  6. เรียกใช้p4 resolveเพื่อแก้ไขข้อขัดแย้งจากการซิงค์
  7. p4 submit -c CHANGE_NUMBERเมื่อคุณพร้อมที่จะส่งการเปลี่ยนแปลงของคุณทำงาน

คุณสามารถใช้p4 revertเพื่อยกเลิกการเปลี่ยนแปลงไฟล์ของคุณ

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

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


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

5
@ Dejavu มันไม่ได้เกี่ยวกับแบบดั้งเดิมกับสมัยใหม่มากนัก มันเกี่ยวกับการรวมศูนย์กับการกระจาย (และการกระจายที่เกิดขึ้นจะทันสมัยกว่า) คนที่แจกจ่ายไม่จำเป็นต้องมีความซับซ้อนมากขึ้น แต่ฉันพูดโดยเฉพาะว่า "Perforce ... ถือว่ามีความซับซ้อนน้อยกว่า ... " ซึ่งเป็นคำแถลงความเห็นไม่ใช่ความจริงและไม่ได้หมายถึงผ้าห่ม คำสั่งเกี่ยวกับทุกระบบ ฉันคิดว่าคอมไพล์มีความซับซ้อนมากขึ้นเพราะมันเพิ่มแนวคิดเพิ่มเติม(เช่นการผลักการดึงการรีบูต) และบางสิ่งไม่ตรงไปตรงมา (เช่นแฮชแทนที่จะเป็นจำนวนการเปลี่ยนแปลงทั่วโลก)
jamesdlin

2
ขอบคุณสำหรับการชี้แจงเจมส์! ฉันเพิ่งได้รับการดูถูกเล็กน้อยเมื่อเร็ว ๆ นี้เพื่อดูว่าเพื่อนร่วมงานทุกคนต้องได้รับการฝึกฝนในฐานะแฮ็กเกอร์คอมไพล์ที่ควรรู้ทักษะการแฮ็กคอมไพล์เพื่อแก้ไขปัญหาบางอย่างที่รู้สึกว่าใช้งานง่ายเมื่อใช้ Perforce
Dejavu

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