कैसे एक Perforce पेड़ में अनियोजित फ़ाइलों को खोजने के लिए? (svn स्थिति का एनालॉग)


87

किसी के पास एक स्क्रिप्ट या उपनाम है जिसे पर्फेक्ट ट्री में अनट्रैकड (वास्तव में: अनअडेडेड) फाइल्स को ढूंढना है?

संपादित करें: मैंने इस पर स्वीकृत उत्तर को अपडेट किया क्योंकि ऐसा लगता है कि जनवरी 2009 की रिलीज़ में पी 4 वी ने इसके लिए समर्थन जोड़ा था।


11
मैं कल्पना नहीं कर सकता कि यह कैसे आता है कि सबसे अधिक इस्तेमाल किया गया कॉर्पोरेट SCM उपकरण इस कार्यक्षमता को याद कर रहा है। संभवतः उनके सभी डेवलपर्स केवल GUI का उपयोग कर रहे हैं।
सोरिन

3
ओह जोर से चिल्लाने के लिए!!!! यह स्वीकार p4 statusनहीं किया गया है कि केवल अनकैप्ड फाइल्स ही नहीं है, यह वास्तव में स्टार्स ट्रेकिंग है। Ie p4 statusकेवल पढ़ने के लिए क्वेरी नहीं है, क्योंकि किसी को नाम से संदेह होगा, लेकिन वास्तव में एक कमांड है जो सामान को बदलता है - कार्यक्षेत्र फ़ाइलों को नहीं। यह वह नहीं है जो एक स्थिति कमांड को करना चाहिए, और न कि क्या svn statusकरता है। निकटतम चीज जो मुझे मिल सकती svn statusहै p4 reconcile -na- -a कहने के लिए "फाइलें जो जोड़ी जानी चाहिए", -n कहने के लिए "वास्तव में कुछ भी नहीं बदलें"। /// मैंने मूल रूप से कुछ अधिक मजबूत कहा।
क्रेजी ग्लीव

1
मैंने stackoverflow.com/questions/9642531/… को पुनर्जीवित किया , जिसे गलत तरीके से stackoverflow.com/questions/9272/… के नए चिह्नp4 status के रूप में चिह्नित किया गया था , नए प्रश्न के रूप में (p4 कमांड gg / hg / bzr / svn जैसी किसी चीज के बराबर है। स्थिति। (संकेत: नहीं ) , और स्वयं इसका उत्तर दिया। बेहतर स्वागत किया
क्रेजी ग्लीव

दोनों p4 reconcileऔर p4 statusजबकि नरक के रूप में धीमी गति से कर रहे हैं, git status1-3 सेकंड में क्रियान्वित समाप्त।
zwcloud

जवाबों:


81

संपादित करें:p4 status अब उपयोग करें । अब हुप्स के माध्यम से कूदने की कोई आवश्यकता नहीं है। देखिए @ कर्नलपनिक का जवाब

P4V के जनवरी 2009 संस्करण में, आप अपने कार्यक्षेत्र के पेड़ के किसी भी फ़ोल्डर पर राइट-क्लिक कर सकते हैं और "सामंजस्यपूर्ण कार्य" पर क्लिक कर सकते हैं ...

यह थोड़ा प्रसंस्करण करेगा फिर उन फ़ाइलों के विभाजन-ट्री दृश्य को लाएगा जिन्हें चेक नहीं किया गया है, लेकिन डिपो संस्करण से मतभेद हैं, या बिल्कुल भी जांच नहीं की गई है। यहां तक ​​कि कुछ अन्य श्रेणियां भी हो सकती हैं।

आप इस दृश्य में फ़ाइलों पर राइट-क्लिक कर सकते हैं और उन्हें देख सकते हैं, उन्हें जोड़ सकते हैं, या उन्हें वापस भी कर सकते हैं।

यह एक बहुत ही आसान उपकरण है जो मेरी गांड को कुछ समय के लिए बचाता है।

संपादित करें: आह विशेष रूप से लिपियों के बारे में पूछा गया सवाल है, लेकिन मैं इस मामले को यहीं छोड़ दूँगा।


इस प्रश्न में एक
शक्तिकृत

क्या यह रेपो में संस्करण के खिलाफ हर एक फ़ाइल को अलग करता है? मुझे एक बड़ा रेपो और एक धीमा कनेक्शन मिला है (जब घर से काम कर रहा है)। यह हमेशा के लिए ले जा सकता है!
gdw2

मुझे नहीं लगता कि यह एक पूर्ण अंतर है, लेकिन यह जल्दी नहीं है।
टेनपॉन

10
ओह जोर से चिल्लाने के लिए!!!! p4 statusसिर्फ अनकैप्ड फाइल्स ही नहीं है, यह वास्तव में स्टार्स ट्रेकिंग है। Ie p4 statusकेवल पढ़ने के लिए क्वेरी नहीं है, क्योंकि किसी को नाम से संदेह होगा, लेकिन वास्तव में एक कमांड है जो सामान को बदलता है - कार्यक्षेत्र फ़ाइलों को नहीं। यह वह नहीं है जो एक स्थिति कमांड को करना चाहिए, और न कि क्या svn statusकरता है। निकटतम चीज़ जो मुझे मिल सकती svn statusहै p4 reconcile -na- -a कहने के लिए "फाइलें जो जोड़ी जानी चाहिए", -n कहने के लिए "वास्तव में कुछ भी नहीं बदलें"। /// मैंने मूल रूप से कुछ अधिक मजबूत कहा।
क्रेजी ग्लीव

1
p4 statusमूल रूप से एक पर्यायवाची है p4 reconcile -n। शायद आप भाग गए p4 status -Aजो एक पर्यायवाची है p4 reconcile?
समीउन

50

लिनक्स पर, या यदि आपके पास विंडोज़ पर स्थापित ग्नू-टूल्स हैं:

find . -type f -print0 | xargs -0 p4 fstat >/dev/null

यह हर बेहिसाब फ़ाइल के लिए एक त्रुटि संदेश दिखाएगा। यदि आप उस आउटपुट को कैप्चर करना चाहते हैं:

find . -type f -print0 | xargs -0 p4 fstat >/dev/null 2>mylogfile

1
Stdout को पुनर्निर्देशित करने से आपको अतिरिक्त फ़िल्टरिंग या अन्य ऑपरेशन करने की अनुमति मिलेगी। उदाहरण के लिए, जावा फ़ाइलों की स्क्रॉल करने योग्य सूची देखने के लिए: ढूंढें। -प्रकार f -print0 | xargs -0 p4 fstat 2> & 1> / dev / null | grep '\ _java' | कम
जॉन नडाल

2
यह मेरे 60K- फाइलों के कार्यक्षेत्र पर बहुत लंबा लगता है। मैंने एक पाइथन स्क्रिप्ट लिखी है जो 10 सेकंड से कम समय में एक ही काम करती है: पी 5 । यह भी समर्थन करता है .p4ignoreऔर पूर्वावलोकन कर सकता है और स्वचालित रूप से अनट्रैक / परिवर्तित / हटाए गए फ़ाइलों को संपादित कर सकता है।
हम्सटरजेन

@hamstergene, बहुत अच्छा!
मार्क हैरिसन

एक छोटी सी स्क्रिप्ट लिखी जो ठीक उसी तरह से होती है अगर किसी को दिलचस्पी हो (जिसमें dir तर्क, अधिकतम गहराई तर्क और आउटपुट को stdout शामिल है)।
अर्नोन ज़िल्का

धन्यवाद; मुझे यह उपयोगी लगा! ध्यान दें कि यह सिम्लिंक्स ( find . -type l) को नहीं संभालता है , और पी 4 फ़ाइलों के लिए भ्रामक आउटपुट को जबरन जोड़ा जाता है क्योंकि वे @या %वर्ण होते हैं । हालाँकि, ऐसी फाइलें अल्पमत में हैं, इसलिए इन एज मामलों की मैन्युअल समीक्षा ज्यादातर मामलों में काम करेगी।
CJBS

19

यूनिक्स के तहत:

find -type f ! -name '*~' -print0| xargs -0 p4 fstat 2>&1|awk '/no such file/{print $1}'

यह उन फ़ाइलों की एक सूची का प्रिंट आउट लेगा जो आपके क्लाइंट या Perforce डिपो में नहीं जोड़ी गई हैं। मैंने ! -name '*~'~ के साथ समाप्त होने वाली फ़ाइलों को बाहर करने के लिए उपयोग किया है।


12

आह, Perforce क्लासिक्स में से एक :) हाँ, यह वास्तव में बेकार है कि डिफ़ॉल्ट रूप से निर्मित कमांड के लिए कोई आसान तरीका नहीं है।

सबसे आसान तरीका है अपने क्लाइंट रूट के तहत सभी फाइलों को खोजने के लिए एक कमांड चलाना, और फिर उन्हें डिपो में जोड़ने का प्रयास करना। आप सभी नई फ़ाइलों के चैंजिस्ट के साथ समाप्त हो जाएंगे और मौजूदा फ़ाइलों को अनदेखा कर दिया जाएगा।

जैसे dir / s / b / AD | p4 -x - जोड़ें

(एक nix कमांड लाइन से 'find -type f -print' का उपयोग करें)।

यदि आप एक भौतिक सूची (कंसोल या फ़ाइल में) चाहते हैं, तो आप एक अंतर के परिणामों पर पाइप कर सकते हैं (या जोड़ सकते हैं यदि आप भी उन्हें एक चैनल में चाहते हैं)।

यदि आप P4Win के भीतर इसे चला रहे हैं, तो आप $ r का उपयोग वर्तमान कार्यक्षेत्र के क्लाइंट रूट को बदलने के लिए कर सकते हैं।


11

का एक एनालॉग है svn statusया git status?

हाँ, लेकिन

Perforce संस्करण 2012.1 के अनुसार, कमांड p4 statusऔर P4V में 'ऑफ़लाइन कार्य समेट' है। हालाँकि, वे दोनों बहुत धीमे हैं। अप्रासंगिक फ़ाइलों को बाहर करने के लिए आपको https://stackoverflow.com/a/13126496/284795 पर एक p4ignore.txtफ़ाइल लिखनी होगी


1
p4 status2012.1 रिलीज के बाद से कई प्रदर्शन सुधार हुए हैं । यदि आप p4 statusप्रदर्शन की चिंताओं के कारण दूर रह रहे हैं, तो यह देखने के लिए फिर से परीक्षण करने के लायक हो सकता है कि यह अब कैसे व्यवहार करता है।
ब्रायन पेंडलटन

7

मैं एक जवाब जोड़ने के लिए बाध्य महसूस करता हूं, क्योंकि स्वीकृत उत्तर, और कुछ अन्य लोगों के पास, जो मुझे लगता है कि एक महत्वपूर्ण समस्या है: वे केवल-पढ़ने के लिए क्वेरी आदेश और परिवर्तन करने वाले आदेश के बीच अंतर को नहीं समझते हैं।

मुझे इस उत्तर के लिए किसी भी क्रेडिट की उम्मीद नहीं है, लेकिन मुझे आशा है कि यह दूसरों के समय को बर्बाद करने से बचने में मदद करेगा और स्वीकृत लेकिन IMG गलत उत्तर का पालन करके गलतियाँ करेगा।

--- + BRIEF

संभवतः एक अनपेक्षित कार्यक्षेत्र में सभी अनुपयोगी फ़ाइलों को खोजने के लिए सबसे सुविधाजनक तरीका है p4 reconcile -na

-a कहते हैं, "मुझे ऐसी फाइलें दें जो रिपॉजिटरी में न हों, यानी उन्हें जोड़ा जाना चाहिए"।

-nकहते हैं कि "कोई बदलाव नहीं करें" - यानी एक सूखा-रन। (हालांकि संदेश कह सकते हैं कि "ऐड के लिए खोला गया", मानसिक रूप से आपको यह व्याख्या करनी होगी कि "ऐड के लिए खोला जाएगा यदि नहीं तो"

संभवतः ऑफ़लाइन रहते हुए किए गए सभी स्थानीय परिवर्तनों को खोजने का सबसे सुविधाजनक तरीका है - न केवल उन फ़ाइलों को जोड़ना पड़ सकता है, बल्कि उन फ़ाइलों को भी नष्ट करने की आवश्यकता हो सकती है, या जिन्हें संपादन के लिए खोले बिना बदला जा सकता p4 editहै p4 reconcile -n

कई उत्तर स्क्रिप्ट प्रदान करते हैं, अक्सर शामिल होते हैं p4 fstat। जबकि मैंने उन सभी लिपियों का सत्यापन नहीं किया है, मैं अक्सर समान स्क्रिप्ट का उपयोग पेरिफेर कमांड्स की कमियों के लिए करता p4 reconcile -nहूं, जैसे - अक्सर मुझे लगता है कि मुझे पेर्फॉर्स डिपो पथ या कार्यक्षेत्र पथ के बजाय स्थानीय पथ चाहिए।

--- + चेतावनी

p4 status अन्य संस्करण नियंत्रण प्रणालियों पर स्थिति कमांड के प्रतिरूप नहीं है।

p4 statusकेवल-पढ़ने के लिए क्वेरी नहीं है। p4 statusवास्तव में उसी प्रकार के परिवर्तन मिलते हैं जो p4 reconcileकरते हैं, और उन्हें रिपॉजिटरी में जोड़ते हैं। p4 statusऐसा लगता नहीं है कि -nड्राई-रन का विकल्प p4 reconcileहै।

यदि आप करते हैं p4 status, तो फाइलों को देखें और सोचें कि "ओह, मुझे उन लोगों की आवश्यकता नहीं है", फिर आपको p4 revertउन्हें उसी कार्यक्षेत्र में संपादन जारी रखना होगा। या फिर p4 statusआपके बदलाव में जोड़े गए परिवर्तनों को अगली बार में जांचा जाएगा।

स्थानीय कार्यक्षेत्र बनाम डिपो pathname के कुछ विवरणों को छोड़कर, इसके p4 statusबजाय उपयोग करने के लिए बहुत कम या कोई कारण नहीं लगता है p4 reconcile -n

मैं केवल कल्पना कर सकता हूं कि जिसने भी गैर-पढ़ने के लिए केवल 'स्थिति' चुना, उसके पास अंग्रेजी भाषा और अन्य संस्करण नियंत्रण उपकरणों की सीमित कमान थी।

--- + P4Vजीयूआई

GUI में p4v, सामंजस्य आदेश स्थानीय परिवर्तन पाता है जिसे संपादन के लिए जोड़ा, हटाया या खोला जा सकता है। सौभाग्य से यह उन्हें डिफ़ॉल्ट रूप से एक चेंजलिस्ट से नहीं जोड़ता है; लेकिन आप अभी भी निरीक्षण विंडो को बंद करने के बाद सावधान रहना चाहते हैं, अगर आप बदलाव नहीं करना चाहते हैं।


p4 स्थिति फ़ाइलों को जोड़ने के लिए प्रतीत नहीं होती है। यह काम की तरह प्रतीत होता है और इसे 'सुलह-एन' के रूप में प्रलेखित किया जाता है। क्या आप सुनिश्चित हैं कि यह चीजों को बदलता है?
kdubs

4

मैं अपने उपकरण में निम्नलिखित का उपयोग करता हूं जो कार्यक्षेत्र में किसी भी फाइल का बैकअप लेता है जो कि रिपॉजिटरी (विंडोज के लिए) से भिन्न होता है। यह कुछ अजीब मामलों को संभालता है, जो कि पीएफएफएस को ज्यादा पसंद नहीं है, जैसे एम्बेडेड ब्लैंक, सितारे, पर्केंट्स और हैशमार्क:

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 " निर्देशिका (/ AD ) को छोड़कर "बेयर" प्रारूप ( / B ) में इस फ़ोल्डर ( / S ) के नीचे या नीचे सभी फाइलों को सूचीबद्ध करता है । " सेड " खतरनाक पात्रों को उनके " % xx " रूप (एक ला HTML) में बदलता है , और " p4 के पास " कमांड इस सूची (" -x- ") को सर्वर के खिलाफ कुछ भी नहीं छोड़ने वाली फ़ाइलों के बारे में जांचता है जो वास्तव में भंडार में पता लगाता है। (" 1> एनयूएल: ")। परिणाम लाइनों का एक गुच्छा है:

Z:\No_Backup\Workspaces\full\depot\Projects\Archerfish\Portal\Main\admin\html\images\nav\navxx_background.gif - file(s) not on client.

Et voilà!


यह एक महान समाधान है, और अभी भी P4 संस्करण 2015.1 के साथ काम करता है
Rian Sanderson

बहुत तेज़! / xargs स्मृति और धीमी गति से चलता है। .Bat फ़ाइल में जोड़ते समय दोहरा% का स्मरण करें।
केविनफ

4

P4Win से वैकल्पिक रूप से, बाएं हाथ के दृश्य पैनल पर "" स्थानीय फ़ाइलें नहीं डिपो में "विकल्प का उपयोग करें।

मैं P4V का अधिक उपयोग नहीं करता हूं, लेकिन मुझे लगता है कि कार्यक्षेत्र दृश्य टैब के फ़िल्टर ड्रॉपडाउन में "स्थानीय कार्यक्षेत्र फ़ाइलें छुपाएं" का चयन करने के लिए बराबर है। fstat

P4V 2015.1 में आपको फ़िल्टर बटन के नीचे ये विकल्प मिलेंगे: यहाँ छवि विवरण दर्ज करें


यह केवल वर्तमान निर्देशिका के तहत फाइलें दिखाता है, दुख की बात है :(
जेपी पी।

2

क्विक 'एन डर्टी: पी 4 वी में प्रश्न में फ़ोल्डर पर राइट-क्लिक करें और उसके नीचे सभी फाइलों को एक नए चैंजलिस्ट में जोड़ें। चेंजलिस्ट में अब वे सभी फाइलें होंगी जो वर्तमान में डिपो का हिस्सा नहीं हैं।


1

निम्न कमांड स्थिति की तरह उत्पादन का उत्पादन, लेकिन कोई भी काफी बराबर है svn statusया git status, प्रत्येक फ़ाइल की स्थिति की एक पंक्ति सारांश प्रदान:

  • p4 status
  • p4 opened
  • p4 diff -ds

0

मेरे पास टिप्पणी करने के लिए पर्याप्त प्रतिष्ठा अंक नहीं हैं, लेकिन रॉस का समाधान उन फाइलों को भी सूचीबद्ध करता है जो ऐड के लिए खुले हैं। आप शायद अपने कार्यक्षेत्र को साफ करने के लिए उसके जवाब का उपयोग नहीं करना चाहते हैं।

निम्नलिखित p4 fstatमार्क (हैरिसन का धन्यवाद) का उपयोग करता है 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"

=== जैक


0

फास्ट विधि, लेकिन थोड़ा रूढ़िवादी। यदि कोडबेस नई फ़ाइलों / परिवर्तन दृश्य को अक्सर जोड़ता नहीं है, तो आप अपने चेकआउट से स्थानीय 'गिट' रिपॉजिटरी बना सकते हैं। साफ-सुथरे पेरिफेरल सिंक से, जिट इनिट, स्थानीय रूप से सभी फाइलों को जोड़ें और कमिट करें। Git स्टेटस तेज़ है और पहले से कमिट नहीं हुई फाइल्स दिखाएगा।


0

p4 fstatआदेश अगर एक फ़ाइल कार्यक्षेत्र में मौजूद है आप परीक्षण, के साथ गठबंधन की सुविधा देता है findनिम्नलिखित पर्ल उदाहरण के रूप में जांच करने के लिए फ़ाइलों का पता करने के लिए:

// 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) में चल रहा है ।


1
कृपया किसी भी स्पष्टीकरण के बिना उत्तर के रूप में कुछ कोड न फेंकें, लेकिन ओपी को कोड को समझने और कुछ सीखने में मदद करने के लिए कुछ स्पष्टीकरण जोड़ें। :)
मार्कस

0

मुझे कुछ ऐसा चाहिए था जो लिनक्स, मैक या विंडोज में काम करे। इसलिए मैंने इसके लिए एक पायथन स्क्रिप्ट लिखी। मूल विचार फाइलों के माध्यम से पुनरावृति करना और p4 fstatप्रत्येक पर अमल करना है। (निश्चित रूप से निर्भरता और tmp फ़ोल्डर्स की अनदेखी)

आप इसे यहाँ देख सकते हैं: https://gist.github.com/givanse/8c69f55f8243733702cf7bcb0e9290a9


0

यह कमांड आपको उन फ़ाइलों की एक सूची दे सकता है जिन्हें जोड़ने, संपादित करने या हटाने की आवश्यकता है:
p4 स्थिति -एड ...
आप उन्हें अलग से भी
p4 स्थिति -a ...
p4 स्थिति -e ...
p4 स्थिति -d का उपयोग कर सकते हैं ...


-1

P4V में, "व्यू" मेनू आइटम के तहत "फाइल्स इन फोल्डर" चुनें जो राइट पैन में एक नया टैब लाता है। टैब के सबसे दाईं ओर एक छोटा सा आइकन है जो 2 आइकन के साथ "फ़ोल्डर में फ़ाइलें" नामक एक विंडो लाता है। बाएं आइकन का चयन करें जो फ़नल की तरह दिखता है और आपको कई विकल्प दिखाई देंगे। "डिपो में नहीं आइटम दिखाएं" चुनें और फ़ोल्डर में सभी फाइलें दिखाई देंगी। फिर जिस फ़ाइल को आप जोड़ना चाहते हैं उस पर बस राइट-क्लिक करें और "मार्क फॉर ऐड ..." चुनें। आप सत्यापित कर सकते हैं कि यह "लंबित" टैब में है। बस सामान्य (Ctrl + S) सबमिट करें।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.