ใครมีสคริปต์หรือนามแฝงเพื่อค้นหาไฟล์ที่ไม่ได้ติดตาม (จริงๆ: ไม่มีการเพิ่ม) ในโครงสร้าง Perforce?
แก้ไข: ฉันอัปเดตคำตอบที่ยอมรับสำหรับคำตอบนี้เนื่องจากดูเหมือนว่า P4V จะเพิ่มการสนับสนุนสำหรับสิ่งนี้ในรุ่นเดือนมกราคม 2552
ใครมีสคริปต์หรือนามแฝงเพื่อค้นหาไฟล์ที่ไม่ได้ติดตาม (จริงๆ: ไม่มีการเพิ่ม) ในโครงสร้าง Perforce?
แก้ไข: ฉันอัปเดตคำตอบที่ยอมรับสำหรับคำตอบนี้เนื่องจากดูเหมือนว่า P4V จะเพิ่มการสนับสนุนสำหรับสิ่งนี้ในรุ่นเดือนมกราคม 2552
p4 status
ไม่เพียงแค่ค้นหาไฟล์ที่ไม่ถูกติดตามเท่านั้น แต่ยังเริ่มติดตามไฟล์เหล่านี้ IE p4 status
ไม่ใช่แบบสอบถามแบบอ่านอย่างเดียวเนื่องจากอาจสงสัยจากชื่อ แต่เป็นคำสั่งที่เปลี่ยนแปลงสิ่งต่างๆไม่ใช่ไฟล์พื้นที่ทำงาน นี่ไม่ใช่สิ่งที่คำสั่งสถานะควรทำและไม่ใช่สิ่งที่svn status
ทำ สิ่งที่ใกล้เคียงที่สุดที่ฉันสามารถหาได้svn status
คือp4 reconcile -na
- - พูดว่า "ไฟล์ที่ควรเพิ่ม", -n เพื่อบอกว่า "ไม่ได้เปลี่ยนแปลงอะไรเลย" /// เดิมฉันพูดอะไรแรงกว่านี้มาก
p4 status
)แล้วตอบเองยินดีดีกว่า
p4 reconcile
และp4 status
ช้าเหมือนนรกในขณะที่git status
ดำเนินการเสร็จสิ้นใน 1-3 วินาที
คำตอบ:
แก้ไข:โปรดใช้p4 status
ตอนนี้ ไม่จำเป็นต้องกระโดดผ่านห่วงอีกต่อไป ดู @ ColonelPanic ของคำตอบ
ใน P4V เวอร์ชันมกราคม 2009 คุณสามารถคลิกขวาที่โฟลเดอร์ใดก็ได้ในโครงสร้างพื้นที่ทำงานของคุณแล้วคลิก "กระทบยอดงานออฟไลน์ ... "
การดำเนินการนี้จะดำเนินการเล็กน้อยจากนั้นจะแสดงมุมมองต้นไม้แยกของไฟล์ที่ไม่ได้เช็คเอาต์ แต่มีความแตกต่างจากเวอร์ชันดีโปหรือไม่ได้เช็คอินเลย อาจมีหมวดหมู่อื่น ๆ อีกเล็กน้อย
คุณสามารถคลิกขวาที่ไฟล์ในมุมมองนี้และตรวจสอบเพิ่มหรือแม้แต่เปลี่ยนกลับ
เป็นเครื่องมือที่มีประโยชน์มากที่ช่วยชีวิตฉันได้ไม่กี่ครั้ง
แก้ไข: อ่าคำถามที่ถามเกี่ยวกับสคริปต์โดยเฉพาะ แต่ฉันจะทิ้งคำตอบนี้ไว้ที่นี่ในกรณีนี้
p4 status
ไม่เพียงแค่ค้นหาไฟล์ที่ไม่ได้ติดตามเท่านั้น แต่ยังเริ่มติดตามไฟล์เหล่านี้ IE p4 status
ไม่ใช่แบบสอบถามแบบอ่านอย่างเดียวเนื่องจากอาจสงสัยจากชื่อ แต่เป็นคำสั่งที่เปลี่ยนแปลงสิ่งต่างๆไม่ใช่ไฟล์พื้นที่ทำงาน นี่ไม่ใช่สิ่งที่คำสั่งสถานะควรทำและไม่ใช่สิ่งที่svn status
ทำ สิ่งที่ใกล้เคียงที่สุดที่ฉันสามารถหาได้svn status
คือp4 reconcile -na
- - พูดว่า "ไฟล์ที่ควรเพิ่ม", -n เพื่อบอกว่า "ไม่ได้เปลี่ยนแปลงอะไรเลย" /// เดิมฉันพูดอะไรแรงกว่านี้มาก
p4 status
p4 reconcile -n
เป็นพื้นไวพจน์สำหรับ บางทีคุณวิ่งp4 status -A
ซึ่งเป็นคำพ้องความหมายp4 reconcile
?
บน linux หรือหากคุณติดตั้ง gnu-tools บน windows:
find . -type f -print0 | xargs -0 p4 fstat >/dev/null
ซึ่งจะแสดงข้อความแสดงข้อผิดพลาดสำหรับทุกไฟล์ที่ไม่มีบัญชี หากคุณต้องการจับภาพผลลัพธ์นั้น:
find . -type f -print0 | xargs -0 p4 fstat >/dev/null 2>mylogfile
.p4ignore
และสามารถดูตัวอย่างและแก้ไขไฟล์ที่ไม่ได้ติดตาม / เปลี่ยนแปลง / ลบโดยอัตโนมัติ
find . -type l
) และให้เอาต์พุตที่ทำให้เข้าใจผิดสำหรับไฟล์ P4 ที่บังคับให้เพิ่มเนื่องจากมีอักขระ@
หรือ %
อย่างไรก็ตามไฟล์ดังกล่าวอยู่ในส่วนน้อยดังนั้นการตรวจสอบกรณี edge เหล่านี้ด้วยตนเองจะได้ผลในกรณีส่วนใหญ่
ภายใต้ Unix:
find -type f ! -name '*~' -print0| xargs -0 p4 fstat 2>&1|awk '/no such file/{print $1}'
สิ่งนี้จะพิมพ์รายการไฟล์ที่ไม่ได้เพิ่มในไคลเอนต์ของคุณหรือที่เก็บ Perforce ฉันเคย! -name '*~'
ยกเว้นไฟล์ที่ลงท้ายด้วย ~.
อ่าหนึ่งในคลาสสิกของ Perforce :) ใช่มันแย่มากที่ยังไม่มีวิธีง่ายๆสำหรับสิ่งนี้ในคำสั่งเริ่มต้น
วิธีที่ง่ายที่สุดคือเรียกใช้คำสั่งเพื่อค้นหาไฟล์ทั้งหมดภายใต้รูทไคลเอ็นต์ของคุณจากนั้นพยายามเพิ่มลงในดีโป คุณจะพบกับรายการการเปลี่ยนแปลงของไฟล์ใหม่ทั้งหมดและไฟล์ที่มีอยู่จะถูกละเว้น
เช่น dir / s / b / AD | p4 -x - เพิ่ม
(ใช้ 'find. -type f -print' จากบรรทัดคำสั่ง nix)
หากคุณต้องการรายการทางกายภาพ (ในคอนโซลหรือไฟล์) คุณสามารถไพพ์ผลลัพธ์ของความแตกต่าง (หรือเพิ่มหากคุณต้องการให้อยู่ในรายการการเปลี่ยนแปลงด้วย)
หากคุณกำลังเรียกใช้สิ่งนี้ภายใน P4Win คุณสามารถใช้ $ r เพื่อแทนที่รูทไคลเอ็นต์ของพื้นที่ทำงานปัจจุบัน
มีอะนาล็อกของ
svn status
หรือgit status
?
ใช่ แต่ .
สำหรับ Perforce เวอร์ชัน 2012.1 มีคำสั่งp4 status
และใน P4V 'กระทบยอดงานออฟไลน์' อย่างไรก็ตามทั้งคู่ช้ามาก หากต้องการยกเว้นไฟล์ที่ไม่เกี่ยวข้องคุณจะต้องเขียนp4ignore.txt
ไฟล์ต่อ https://stackoverflow.com/a/13126496/284795
p4 status
ตั้งแต่รุ่น 2012.1 หากคุณอยู่ห่างจากp4 status
ปัญหาด้านประสิทธิภาพอาจคุ้มค่าที่จะทดสอบอีกครั้งเพื่อดูว่าตอนนี้ทำงานอย่างไร
ฉันรู้สึกถูกกระตุ้นให้เพิ่มคำตอบเนื่องจากคำตอบที่ยอมรับและคำตอบอื่น ๆ บางส่วนมีสิ่งที่ฉันคิดว่าเป็นปัญหาสำคัญ: พวกเขาไม่เข้าใจความแตกต่างระหว่างคำสั่งเคียวรีแบบอ่านอย่างเดียวและคำสั่งที่ทำการเปลี่ยนแปลง
ฉันไม่คาดหวังเครดิตใด ๆ สำหรับคำตอบนี้ แต่ฉันหวังว่ามันจะช่วยให้ผู้อื่นหลีกเลี่ยงการเสียเวลาและทำผิดพลาดโดยทำตามคำตอบที่ยอมรับ แต่ IMHO ไม่ถูกต้อง
--- + สั้น ๆ
วิธีที่สะดวกที่สุดในการค้นหาไฟล์ที่ไม่ได้ติดตามทั้งหมดในพื้นที่ทำงานของ perforce คือ p4 reconcile -na
น่าจะเป็นวิธีที่สะดวกที่สุดในการค้นหาไฟล์ที่ไม่ได้ติดตามทั้งหมดในพื้นที่ทำงานอย่างเลี่ยงไม่พ้นคือ
-a
บอกว่า "ขอไฟล์ที่ไม่ได้อยู่ในที่เก็บนั่นคือควรจะเพิ่ม"
-n
พูดว่า "ไม่ทำการเปลี่ยนแปลง" นั่นคือการวิ่งแบบแห้ง (แม้ว่าข้อความอาจระบุว่า "เปิดสำหรับเพิ่ม" ในใจคุณต้องตีความว่าเป็น "จะเปิดเพื่อเพิ่มถ้าไม่ใช่ -n")
อาจเป็นวิธีที่สะดวกที่สุดในการค้นหาการเปลี่ยนแปลงในเครื่องทั้งหมดที่ทำในขณะออฟไลน์ไม่ใช่แค่ไฟล์ที่อาจต้องเพิ่ม แต่ยังรวมถึงไฟล์ที่อาจต้องลบหรือถูกเปลี่ยนแปลงโดยไม่ต้องเปิดเพื่อแก้ไขp4 edit
ก็คือp4 reconcile -n
เป็น
p4 fstat
คำตอบที่หลากหลายสคริปต์มักเกี่ยวข้องกับ ในขณะที่ฉันยังไม่ได้ตรวจสอบสคริปต์เหล่านั้นทั้งหมด แต่ฉันมักใช้สคริปต์ที่คล้ายกันเพื่อชดเชยข้อบกพร่องของคำสั่งบังคับเช่นp4 reconcile -n
- บ่อยครั้งที่ฉันพบว่าฉันต้องการเส้นทางภายในเครื่องแทนที่จะเป็นเส้นทางคลัง Perforce หรือเส้นทางพื้นที่ทำงาน
- + คำเตือน
p4 status
ไม่ใช่คู่กับคำสั่งสถานะบนระบบควบคุมเวอร์ชันอื่น
p4 status
ไม่ใช่แบบสอบถามแบบอ่านอย่างเดียว p4 status
พบการเปลี่ยนแปลงประเภทเดียวกันกับที่p4 reconcile
ทำและเพิ่มลงในที่เก็บ p4 status
ดูเหมือนจะไม่มี-n
ตัวเลือกแบบแห้งเช่นp4 reconcile
ทำ
ถ้าเป็นเช่นp4 status
นั้นให้ดูที่ไฟล์และคิดว่า "โอ้ฉันไม่ต้องการมัน" จากนั้นคุณจะต้องทำp4 revert
เช่นนั้นหากต้องการแก้ไขต่อในพื้นที่ทำงานเดิม มิฉะนั้นการเปลี่ยนแปลงที่p4 status
เพิ่มลงในชุดการเปลี่ยนแปลงของคุณจะได้รับการตรวจสอบในครั้งต่อไป
ดูเหมือนจะมีเหตุผลเพียงเล็กน้อยหรือไม่มีเลยที่จะใช้p4 status
มากกว่าp4 reconcile -n
ยกเว้นสำหรับรายละเอียดบางส่วนของพื้นที่ทำงานในท้องถิ่น VS สถานีชื่อพา ธ
ฉันสามารถจินตนาการได้ว่าใครก็ตามที่เลือก 'สถานะ' สำหรับคำสั่งที่ไม่ใช่แบบอ่านอย่างเดียวมีคำสั่งที่ จำกัด สำหรับภาษาอังกฤษและเครื่องมือควบคุมเวอร์ชันอื่น ๆ
--- + P4V
GUI
ใน GUI p4v
คำสั่งกระทบยอดจะค้นหาการเปลี่ยนแปลงในระบบที่อาจต้องเพิ่มลบหรือเปิดเพื่อแก้ไข โชคดีที่ไม่ได้เพิ่มลงในรายการการเปลี่ยนแปลงโดยค่าเริ่มต้น แต่คุณอาจต้องระมัดระวังในการปิดหน้าต่างกระทบยอดหลังจากตรวจสอบแล้วหากคุณไม่ต้องการดำเนินการเปลี่ยนแปลง
ฉันใช้สิ่งต่อไปนี้ในเครื่องมือของฉันที่สำรองไฟล์ใด ๆ ในพื้นที่ทำงานที่แตกต่างจากที่เก็บ (สำหรับ Windows) มันจัดการกรณีแปลก ๆ บางอย่างที่ Perforce ไม่ชอบมากนักเช่นช่องว่างแบบฝังดาวเปอร์เซ็นต์และแฮชมาร์ก:
dir /S /B /A-D | sed -e "s/%/%25/g" -e "s/@/%40/g" -e "s/#/%23/g" -e "s/\*/%2A/g" | p4 -x- have 1>NUL:
" dir / S / B / AD " แสดงรายการไฟล์ทั้งหมดที่หรือด้านล่างโฟลเดอร์นี้ ( / S ) ในรูปแบบ "bare" ( / B ) ไม่รวมไดเร็กทอรี (/ AD ) " sed " จะเปลี่ยนอักขระที่เป็นอันตรายเป็นรูปแบบ" % xx " (a la HTML) และคำสั่ง" p4 have " จะตรวจสอบรายการนี้ (" -x- ") กับเซิร์ฟเวอร์ที่ทิ้งสิ่งที่เกี่ยวกับไฟล์ที่พบในที่เก็บข้อมูล (" 1> NUL: ") ผลลัพธ์ที่ได้คือเส้นต่างๆเช่น:
Z:\No_Backup\Workspaces\full\depot\Projects\Archerfish\Portal\Main\admin\html\images\nav\navxx_background.gif - file(s) not on client.
Et voila!
หรือจาก P4Win ให้ใช้ตัวเลือก "" Local Files not in Depot "บนแผงมุมมองด้านซ้ายมือ
ฉันไม่ได้ใช้ P4V มากนัก แต่ฉันคิดว่าสิ่งที่เทียบเท่าคือการเลือก "ซ่อนไฟล์พื้นที่ทำงานในเครื่อง" ในเมนูแบบเลื่อนลงตัวกรองของแท็บมุมมองพื้นที่ทำงานวิธีใช้ p4 fstat
Quick 'n Dirty: ใน p4v ให้คลิกขวาที่โฟลเดอร์ดังกล่าวแล้วเพิ่มไฟล์ทั้งหมดที่อยู่ข้างใต้ลงในรายการการเปลี่ยนแปลงใหม่ ตอนนี้รายการการเปลี่ยนแปลงจะมีไฟล์ทั้งหมดที่ไม่ได้เป็นส่วนหนึ่งของคลัง
คำสั่งต่อไปนี้สร้างเอาต์พุตที่เหมือนสถานะ แต่ไม่มีอะไรเทียบเท่าsvn status
หรือgit status
ให้ข้อมูลสรุปสถานะของแต่ละไฟล์แบบบรรทัดเดียว:
p4 status
p4 opened
p4 diff -ds
ฉันมีคะแนนชื่อเสียงไม่เพียงพอที่จะแสดงความคิดเห็น แต่โซลูชันของ Ross ยังแสดงรายการไฟล์ที่เปิดให้เพิ่ม คุณอาจไม่ต้องการใช้คำตอบของเขาเพื่อทำความสะอาดพื้นที่ทำงานของคุณ
ต่อไปนี้จะใช้p4 fstat
(ขอบคุณ Mark Harrison) แทนp4 have
และแสดงรายการไฟล์ที่ไม่ได้อยู่ในคลังและไม่ได้เปิดให้เพิ่ม
dir /S /B /A-D | sed -e "s/%/%25/g" -e "s/@/%40/g" -e "s/#/%23/g" -e "s/\*/%2A/g" | p4 -x- fstat 2>&1 | sed -n -e "s/ - no such file[(]s[)]\.$//gp"
=== Jac
วิธีการที่รวดเร็ว แต่ดั้งเดิมเพียงเล็กน้อย หาก codebase ไม่เพิ่มไฟล์ใหม่ / เปลี่ยนมุมมองบ่อยเกินไปคุณสามารถสร้างที่เก็บ 'git' ในระบบจากการชำระเงินของคุณ จาก clean perforce sync, git init, เพิ่มและคอมมิตไฟล์ทั้งหมดในเครื่อง สถานะ Git นั้นรวดเร็วและจะแสดงไฟล์ที่ไม่ได้คอมมิตก่อนหน้านี้
p4 fstat
คำสั่งช่วยให้คุณสามารถทดสอบว่าไฟล์ที่มีอยู่ในพื้นที่ทำงานร่วมกับfind
การค้นหาไฟล์ที่จะตรวจสอบในขณะที่ตัวอย่างเช่น Perl ต่อไปนี้:
// throw the output of p4 fstat to a 'output file'
// find:
// -type f :- only look at files,
// -print0 :- terminate strings with \0s to support filenames with spaces
// xargs:
// Groups its input into command lines,
// -0 :- read input strings terminated with \0s
// p4:
// fstat :- fetch workspace stat on files
my $status=system "(find . -type f -print0 | xargs -0 p4 fstat > /dev/null) >& $outputFile";
// read output file
open F1, $outputFile or die "$!\n";
// iterate over all the lines in F1
while (<F1>) {
// remove trailing whitespace
chomp $_;
// grep lines which has 'no such file' or 'not in client'
if($_ =~ m/no such file/ || $_ =~ m/not in client/){
// Remove the content after '-'
$_=~ s/-\s.*//g;
// below line is optional. Check ur output file for more clarity.
$_=~ s/^.\///g;
print "$_\n";
}
}
close F1;
หรือคุณสามารถใช้ p4 reconcile -n -m ...
หากถูก "เปิดเพื่อลบ" แสดงว่าถูกลบออกจากพื้นที่ทำงานแล้ว โปรดทราบว่าคำสั่งด้านบนกำลังทำงานในโหมดแสดงตัวอย่าง ( -n
)
ฉันต้องการบางอย่างที่จะใช้งานได้ทั้งใน Linux, Mac หรือ Windows ดังนั้นฉันจึงเขียนสคริปต์ Python สำหรับมัน แนวคิดพื้นฐานคือการวนซ้ำผ่านไฟล์และดำเนินการp4 fstat
กับแต่ละไฟล์ (แน่นอนว่าละเว้นการอ้างอิงและโฟลเดอร์ tmp)
คุณสามารถค้นหาได้ที่นี่: https://gist.github.com/givanse/8c69f55f8243733702cf7bcb0e9290a9
คำสั่งนี้สามารถให้รายการไฟล์ที่ต้องเพิ่มแก้ไขหรือลบ:
สถานะ p4 -aed ...
คุณสามารถใช้แยกต่างหากเช่นกัน
สถานะ p4 -a ...
p4 สถานะ -e ...
p4 สถานะ -d ...
ใน P4V ภายใต้รายการเมนู "มุมมอง" ให้เลือก "ไฟล์ในโฟลเดอร์" ซึ่งจะแสดงแท็บใหม่ในบานหน้าต่างด้านขวา ทางด้านขวาสุดของแท็บจะมีไอคอนเล็ก ๆ ปรากฏขึ้นมาในหน้าต่างชื่อ "ไฟล์ในโฟลเดอร์" พร้อมไอคอน 2 ไอคอน เลือกไอคอนด้านซ้ายที่ดูเหมือนช่องทางแล้วคุณจะเห็นตัวเลือกต่างๆ เลือก "แสดงรายการที่ไม่ได้อยู่ใน Depot" จากนั้นไฟล์ทั้งหมดในโฟลเดอร์จะปรากฏขึ้น จากนั้นคลิกขวาที่ไฟล์ที่คุณต้องการเพิ่มแล้วเลือก "Mark for Add ... " คุณสามารถตรวจสอบได้ในแท็บ "รอดำเนินการ" เพียงส่งตามปกติ (Ctrl + S)