2008-08-12 11 views
82

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

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

+11

मैं कल्पना नहीं कर सकता कि यह कैसे आता है कि सबसे अधिक इस्तेमाल किया जाने वाला कॉर्पोरेट एससीएम उपकरण इस कार्यक्षमता को याद कर रहा है। शायद उनके सभी डेवलपर्स केवल जीयूआई का उपयोग कर रहे हैं। – sorin

+2

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

+1

मैंने http: // stackoverflow को पुनर्जीवित किया।कॉम/प्रश्न/9642531/क्या-है-द-पी 4-कमांड-समकक्ष-टू-कुछ-एसवीएन-स्टेटस, जिसे गलत तरीके से http://stackoverflow.com/questions/9272/how- के डुप्लिकेट के रूप में चिह्नित किया गया था। नए प्रश्न के रूप में खोजने के लिए अनचाहे-फाइल-इन-ए-पर्फोर्स-पेड़-एनालॉग-एस-एसएनएन-स्टेटस [[पीआईटी कमांड क्या है जैसे गिट/एचजी/बीजीआर/एसवीएन स्थिति? (संकेत: 'पी 4 स्थिति' नहीं)] (http://stackoverflow.com/questions/39937962/what-is-the-p4-command-equivalent-to-something-like-git-hg-bzr-svn-status-hint) , और यह अपने आप को जवाब बेहतर स्वागत के लिए stdout –

उत्तर

76

संपादित करें: कृपया p4 status का उपयोग करें। हुप्स के माध्यम से कूदने की कोई ज़रूरत नहीं है। @ कर्नलपैनिक के answer देखें।

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

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

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

यह एक बहुत ही आसान टूल है जो मेरे गधे को कुछ बार बचाता है।

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

+1

बहुत बढ़िया अद्यतन के लिए धन्यवाद –

+0

जोड़ा गया इस सवाल में एक powershell समाधान:।।।! http: // stackoverflow.com/questions/3217152/in-perforce-how-can-i-delete-files-from-a-directory-in-my-workspace-where-the-fil/3219246#3219246 – tenpn

+0

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

12

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

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

ई.g डीआईआर/एस/बी/ए-डी | पी 4-एक्स -

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

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

यदि आप इसे पी 4Win के भीतर चला रहे हैं तो आप मौजूदा वर्कस्पेस के क्लाइंट रूट को प्रतिस्थापित करने के लिए $ r का उपयोग कर सकते हैं।

49

linux पर, या यदि आप जीएनयू उपकरण खिड़कियों पर स्थापित किया है:

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

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

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

रीडायरेक्ट कर रहा है stderr आप अतिरिक्त फ़िल्टरिंग या अन्य कार्रवाई करने के लिए अनुमति देगा उदाहरण के लिए, जावा फ़ाइलों की एक स्क्रॉल सूची देखने के लिए:।।। लगता है प्रकार च -print0 | xargs -0 p4 2 fstat > और 1>/dev/बातिल | ग्रेप '\ जावा' | कम –

+2

यह मेरा 60K-फ़ाइलें कार्यक्षेत्र पर पागलपन की हद तक समय लगता है मैं लिखा है एक अजगर स्क्रिप्ट जो 10 सेकंड के तहत में एक ही काम करता है:। [पी 5] (https: //github.com/hamstergene/p5)। यह भी suppo rts '.p4ignore' और पूर्वावलोकन और स्वचालित रूप से अनचाहे/बदली/हटाई गई फ़ाइलों को संपादित कर सकते हैं। – hamstergene

+0

@hamstergene, बहुत अच्छा! –

4

वैकल्पिक रूप से, "" स्थानीय फ़ाइलें नहीं डिपो में "

बाएं हाथ दृश्य पैनल पर विकल्प का उपयोग मैं P4V ज्यादा प्रयोग नहीं करते, लेकिन। मुझे लगता है कि इसी तरह की "छुपाएं स्थानीय कार्यस्थान फ़ाइलें" कार्यस्थान दृश्य tab.p4 मदद की फ़िल्टर ड्रॉप-डाउन में

fstat

P4V 2015.1 में आप इस तरह फिल्टर बटन के तहत निम्न विकल्प पाएंगे चयन करने के लिए है: enter image description here

+0

यह केवल वर्तमान निर्देशिका के अंतर्गत फ़ाइलें पता चलता है, उदासी :( –

18

Unde आर यूनिक्स:

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

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

+0

मैं वास्तव में इस समाधान की तरह। यह बहुत अच्छी तरह काम करता है। – engtech

4

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

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

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

एट वॉइल एंड एग्रीव ;!

+0

यह एक बढ़िया उपाय है, और अभी भी पी 4 के साथ काम करता ! संस्करण 2015.1 –

+0

बहुत तेजी से लगता है/xargs स्मृति और धीमी गति से खत्म हो जाता है जब फ़ाइल .bat को जोड़ने डबल% के लिए याद – kevinf

1

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

+0

एक अपवित्र वारंट करने के लिए पर्याप्त तेज़ - लेकिन गंदे। –

9

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

हाँ, लेकिन

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

+0

2012.1 रिलीज के बाद से 'पी 4 स्थिति' में कई प्रदर्शन सुधार हुए हैं। यदि आप प्रदर्शन चिंताओं के कारण 'पी 4 स्थिति' से दूर रह रहे हैं, तो यह फिर से परीक्षण करने के लायक हो सकता है कि यह अब कैसा व्यवहार करता है। –

-1

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

0

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

निम्नलिखित p4 have के बजाय p4 fstat (धन्यवाद मार्क हैरिसन) का उपयोग करता है, और फ़ाइलों कि डिपो में नहीं हैं और जोड़ने के लिए खुला नहीं कर रहे हैं सूचीबद्ध करता है।

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" 

=== जैक

1

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

  • p4 status
  • p4 opened
  • p4 diff -ds
4

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

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

--- + संक्षिप्त

शायद एक जबरदस्ती कार्यक्षेत्र में सभी ट्रैक न किए गए फ़ाइलों को खोजने के लिए सबसे सुविधाजनक तरीका है 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 परिवर्तन अगली बार चेक किए जाएंगे।

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

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

--- + P4V जीयूआई

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

0

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

0

// एक 'आउटपुट फ़ाइल'

मेरी $ स्थिति = प्रणाली "के लिए p4 fstat के उत्पादन में फेंक (खोजने के प्रकार च -print0 |। Xargs -0 p4 fstat>/dev/बातिल)> & $ outputfile ";

// पढ़ने आउटपुट फ़ाइल खुला F1, $ outputFile या मरें "$! \ N";

while (<F1>){ 
    chomp $_; 

// ग्रेप लाइनों जो 'ऐसी कोई फ़ाइल' या 'ग्राहक में नहीं'

if($_ =~ m/no such file/ || $_ =~ m/not in client/){ 

// के बाद सामग्री निकालना है '-'

 $_=~ s/-\s.*//g; 
// नीचे

लाइन वैकल्पिक है। अधिक स्पष्टता के लिए अपनी आउटपुट फ़ाइल देखें। $ _ = ~ s /^./// g;

 print "$_\n"; 
    } 
} 
close F1; 

या आप सामंजस्य -n -m उपयोग कर सकते हैं ...

यह 'हटाएँ के लिए खोला' जाता है तो यह कार्यस्थल से निकाला जा चुका है। ध्यान दें कि उपरोक्त आदेश पूर्वावलोकन मोड ('-n') में चल रहा है।

+1

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