คุณสามารถ "ละเว้น" ไฟล์ใน Perforce ได้หรือไม่?


101

บางครั้งฉันใช้คุณสมบัติ 'Reconcile Offline Work ... ' ที่พบใน P4V IDE ของ Perforce เพื่อซิงค์ไฟล์ใด ๆ ที่ฉันใช้งานอยู่ในขณะที่ตัดการเชื่อมต่อจากคลัง P4 เปิดหน้าต่างอื่นที่ทำหน้าที่เป็น 'Folder Diff'

ฉันมีไฟล์ที่ไม่ต้องการเช็คอินในการควบคุมแหล่งที่มา (เช่นไฟล์ที่พบในโฟลเดอร์ bin เช่น DLLs โค้ดที่สร้างเอาต์พุตเป็นต้น) มีวิธีการกรองไฟล์ / โฟลเดอร์เหล่านั้นไม่ให้ปรากฏเป็น "ใหม่" หรือไม่ซึ่งอาจเป็นได้ เพิ่มแล้ว พวกเขามักจะเกะกะรายการไฟล์ที่ฉันสนใจจริงๆ P4 มีคุณสมบัติเทียบเท่า 'ไฟล์ละเว้น' ของ Subversion หรือไม่?


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

2
ที่ฟอรัมแนวคิดของ Perforce คุณสามารถโหวตข้อเสนอแนะสำหรับรายการละเว้นสไตล์ Git ได้ที่p4ideax.com/ideas/15/ignore-support
Colonel Panic

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

คำตอบ:


59

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


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

- // depot / foo / *. dll //CLIENT/foo/*.dll
- // depot / foo /.../*. dll //CLIENT/foo/.../*.dll

บรรทัดแรกจะลบออกจากไดเร็กทอรี "foo" และบรรทัดที่สองจะลบออกจากไดเร็กทอรีย่อยทั้งหมด ตอนนี้เมื่อคุณ 'Reconcile Offline Work ... ' ไฟล์. dll ทั้งหมดจะถูกย้ายไปไว้ในโฟลเดอร์ "Excluded Files" ที่ด้านล่างของการแสดงผลโฟลเดอร์ พวกเขาจะไม่อยู่ในเส้นทางของคุณ แต่ยังสามารถดูและจัดการได้หากคุณต้องการจริงๆ

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

- // depot / foo ... / *. dll //CLIENT/foo.../*.dll

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

6
หมายเหตุ: สิ่งนี้ใช้ไม่ได้กับการปรับยอดงานออฟไลน์ปกติจาก p4v "ไฟล์ที่ยกเว้น" ดูเหมือนจะอยู่ในหน้าต่างกระทบยอด "ขั้นสูง" เท่านั้น ...
Catskul

6
ตัวกรองแยกไม่ทำงานในReconcile Offline Workกล่องโต้ตอบ จะใช้งานได้ถ้าคุณเปิดเข้าไปข้างในAdvanced Reconcile...แต่ก็ไม่มีประโยชน์เพราะใน 99.9% ของเวลาที่คุณไม่ต้องการหรือต้องการใช้กล่องโต้ตอบขั้นสูง
sorin

12
@raven: 1) (ตัวอย่าง :) บางโปรเจ็กต์ใช้โฟลเดอร์ bin / obj ภายใต้แต่ละโปรเจ็กต์แทนที่จะจัดให้อยู่ในตำแหน่งส่วนกลาง (ข้อสรุปทั่วไป :) สมมติฐานของ Perforce ที่ว่าไฟล์ระดับกลางทั้งหมดถูกวางไว้ในตำแหน่งพื้นที่ทำงานที่แยกออกได้ง่ายเป็นการออกแบบที่ จำกัด โดยไม่จำเป็นสำหรับ VCS ที่จะสร้างขึ้น 2) บางโปรเจ็กต์เกี่ยวข้องกับแคชภายในเครื่องและ / หรือไฟล์อื่น ๆ ที่ผู้ใช้สร้างขึ้นในโครงสร้างไดเร็กทอรี (ดังตัวอย่างเช่นแคช * .ncb IntelliSense) การไม่สามารถแยกออกเป็นนโยบายทั่วไปได้ทำให้คุณลักษณะ Reconcile Offline Work และ Diff Folders ลดลงอย่างรุนแรง
Sam Harwell

6
ปัญหาเฉพาะนี้กำลังฆ่าฉัน
Warren P

47

ใช่ แต่.

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

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

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

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

น่าขบขันเอกสาร Perforceแสดง '.p4ignore' เป็นตัวอย่างกฎการละเว้นซึ่งย้อนกลับ! หากกฎมีประโยชน์ควรแชร์เป็นส่วนหนึ่งของที่เก็บ


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

หากคุณรู้จักใครที่ Perforce โปรดส่งอีเมลถึงพวกเขาในโพสต์นี้


2
ขอบคุณสำหรับคำชี้แจง ฉันลองใช้. p4ignore กับ P4VS แต่วิธีแก้ปัญหาของฉันที่ควรจะถูกละเว้นไม่ได้ถูกเพิกเฉย ตอนแรกฉันคิดว่าฉันทำอะไรผิด ตอนนี้ฉันรู้ดีกว่า
Michael S.

1
@gentlesea ณ Perforce 2013.1 ในที่สุดคุณสมบัติการละเว้นก็ทำงานในแอพกราฟิก
พันเอก Panic

2
การอภิปราย 'ทำให้คุณสมบัติการละเว้นทำงานนอกกรอบ' ที่p4ideax.com/ideas/17856/…
พันเอก Panic

1
สำหรับตัวแปรการกำหนดค่าที่แตกต่างกันไปตามพื้นที่ทำงานที่คุณใช้อยู่ให้ลองใช้ไฟล์ P4CONFIG จากนั้นคุณสามารถมีไฟล์ P4CONFIG ของคุณระบุค่า P4IGNORE ที่แตกต่างกันเมื่อคุณย้ายจากพื้นที่ทำงานไปยังพื้นที่ทำงาน
Bryan Pendleton

2
Perforce ไม่รู้วิธีสร้างซอฟต์แวร์ที่เหมาะสมพวกเขาไม่ได้รับพื้นฐาน นั่นเป็นเหตุผลว่าทำไมทุกคนที่ติดอยู่กับความฝันที่จะย้ายไปคอมไพล์
Pavel P

22

สิ่งนี้ใช้งานได้ตั้งแต่ Perforce 2013.1 กลไก P4IGNORE ใหม่ได้รับการเพิ่มครั้งแรกในรุ่น 2012.1 ซึ่งอธิบายไว้ในบล็อก Perforce ที่นี่:

https://www.perforce.com/blog/new-20121-p4ignore

ตามที่อธิบายไว้ในตอนนี้คุณตั้งค่าตัวแปรสภาพแวดล้อม "P4IGNORE" เป็นชื่อไฟล์ที่มีรายการไฟล์ที่จะละเว้น

ดังนั้นคุณสามารถตรวจสอบเพื่อดูว่าคุณชอบมันอย่างไร


1
คุณยังสามารถใส่ชื่อไดเร็กทอรีไม่ใช่แค่ชื่อไฟล์
ashes999

ดังที่กล่าวไว้ก่อนหน้านี้: ขออภัยคุณต้องตั้งค่า P4IGNORE
Technophile

1
ฉันแก้ไขลิงก์ @DerMike - ฉันเดาว่า Perforce เปลี่ยน URL ของบล็อก
svec

7

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

write user * * -//.../*.suo
write user * * -//.../*.obj
write user * * -//.../*.ccscc

ฉันจำได้ว่าเคยทำสิ่งนี้มาก่อน แต่ฉันไม่มีสิทธิ์ที่จำเป็นในการทดสอบที่นี่ ดูคู่มือ Sysadmin ของ Perforceและทดลองใช้


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

6

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

จาก p4 help stream

Ignored: Optional; a list of file or directory names to be ignored in
                 client views. For example:

                     /tmp      # ignores files named 'tmp'
                     /tmp/...  # ignores dirs named 'tmp'
                     .tmp      # ignores file names ending in '.tmp'

                 Lines in the Ignored field may appear in any order.  Ignored
                 names are inherited by child stream client views.

โดยพื้นฐานแล้วคำตอบของ @ raven ระบุ แต่ทำได้ง่ายกว่าด้วยสตรีมเนื่องจากจะแพร่กระจายไปยังทุกพื้นที่ทำงานโดยอัตโนมัติโดยใช้สตรีมนั้น นอกจากนี้ยังใช้กับสตรีมที่สืบทอดมาจากสตรีมที่คุณระบุประเภทการละเว้น

คุณสามารถแก้ไขสตรีมผ่าน p4 stream //stream_depot/stream_nameหรือคลิกขวาที่สตรีมในมุมมองสตรีมของ p4v

และตามที่ @svec ระบุไว้ความสามารถในการระบุไฟล์ละเว้นต่อพื้นที่ทำงานกำลังจะมาเร็ว ๆ นี้และในความเป็นจริงแล้วในP4 2012.1 เบต้า


ใช่สิ่งนี้ได้ผลสำหรับฉันในการแชร์การตั้งค่า "ละเว้น" กับทั้งทีม (ฉันใช้ p4 2013.2) โปรดทราบว่าจะใช้งานได้เฉพาะในคลังที่เปิดใช้งานสตรีมเท่านั้น (หากคุณสามารถเผยแพร่ตัวแปรสภาพแวดล้อม P4IGNORE = .p4ignore ในทีมของคุณนั่นอาจเป็นทางออกที่ดีที่สุด)
โยโย่

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

3

ข้อเสนอแนะของ Will ในการใช้.p4ignoreดูเหมือนจะใช้ได้กับปลั๊กอิน WebSphere Studio (P4WSAD) เท่านั้น ฉันเพิ่งลองใช้บนกล่อง windows ในเครื่องของฉันและไฟล์และไดเรกทอรีใด ๆ ที่ฉันระบุไว้จะไม่ถูกเพิกเฉย

คำแนะนำของ Raven ในการปรับเปลี่ยนข้อมูลจำเพาะลูกค้าของคุณเป็นวิธีที่ถูกต้องภายใต้ Perforce การจัดระเบียบรหัส / ข้อมูล / ไฟล์ปฏิบัติการของคุณอย่างเหมาะสมและไฟล์เอาต์พุตที่สร้างขึ้นจะทำให้กระบวนการยกเว้นไฟล์จากการตรวจสอบง่ายขึ้นมาก

ในฐานะที่เป็นแนวทางที่เข้มงวดมากขึ้นคุณสามารถเขียนทริกเกอร์ส่งซึ่งจะปฏิเสธการส่งรายการการเปลี่ยนแปลงหากมีไฟล์บางไฟล์ที่มีนามสกุลบางไฟล์เป็นต้น


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

9
โอ้และไม่ต้องพูดถึงคุณต้องการแยกรหัสของคุณหรือไม่? ขอให้โชคดีในการรักษาพื้นที่ทำงานของคุณสำหรับแต่ละสาขา ฟังดูเหมือนสนุก!
Mike

2

คำตอบทางประวัติศาสตร์ - ไม่ถูกต้องอีกต่อไป ในตอนแรกที่เขียนนี้มันเป็นความจริง

คุณไม่สามารถเขียนและตรวจสอบในไฟล์ที่เซิร์ฟเวอร์จะใช้เพื่อละเว้นกฎ รูปแบบไฟล์ glob หรือ regexp ทั่วไปจะไม่สนใจใน perforce

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

ในระยะสั้นฉันพบว่า Perforce อ่อนแอมากในด้านนี้ ในขณะที่ฉันขอขอบคุณที่ผู้ที่ใช้ Eclipse Plugin สามารถใช้ได้.p4ignoreและฉันคิดว่ามันเยี่ยมมาก แต่ก็ทำให้พวกเราที่ไม่ได้ใช้งานอยู่ในความมืด

อัปเดต: ดูคำตอบที่ยอมรับสำหรับความสามารถใหม่ของ P4IGNORE ที่เพิ่มเข้ามาในกลางปี ​​2555


1

ฉันพบว่ามันง่ายที่สุดในการปรับยอดงานออฟไลน์โดยใช้สคริปต์ BASH เช่นนี้:

#!/bin/bash
# reconcile P4 offline work, assuming P4CLIENT is set
if [ -z "$P4CLIENT" ] ; then echo "P4CLIENT is not set"; exit 1; fi
unset PWD # confuses P4 on Windows/CYGWIN

# delete filew that are no longer present
p4 diff -sd ... | p4 -x - delete

# checkout files that have been changed.  
# I don't run this step.  Instead I just checkout everything, 
# then revert unchanged files before committing.
p4 diff -se ... | pr -x - edit

# Add new files, ignoring subversion info, EMACS backups, log files
# Filter output to see only added files and real errors
find . -type f \
 | grep -v -E '(\.svn)|(/build.*/)|(/\.settings)|~|#|(\.log)' \
 | p4 -x - add \
 | grep -v -E '(currently opened for add)|(existing file)|(already opened for edit)'

ผมดัดแปลงมาจากบทความพ้นฐานความรู้นี้


เมื่อเจ็ดปีที่แล้วฉันไม่แปลกใจเลย ฉันแปลกใจที่ทุกคนยังคงใช้ Perforce
kevin cline

... ไม่เลือก: '(
DerMike

0

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

http://p4delta.sourceforge.net

ขออภัยในขณะนี้ดูเหมือนจะสร้างรายการไฟล์ที่เหมาะสม แต่ฉันไม่สามารถใช้งาน "p4delta --execute" ได้ ("ไม่สามารถแก้ไขสตริงที่ตรึง") และโครงการยังไม่ได้รับการอัปเดตในปีพ. บางทีคนอื่นจะโชคดีกว่า


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