كيفية العثور على الملفات التي لم يتم تعقبها في شجرة Perforce؟(التناظرية لحالة svn)

StackOverflow https://stackoverflow.com/questions/9272

  •  08-06-2019
  •  | 
  •  

سؤال

أي شخص لديه برنامج نصي أو اسم مستعار للعثور على غير متعقب (حقًا:غير المضافة) الملفات في شجرة Perforce؟

يحرر:لقد قمت بتحديث الإجابة المقبولة على هذه الإجابة لأنه يبدو أن P4V أضاف دعمًا لهذا في إصدار يناير 2009.

هل كانت مفيدة؟

المحلول

يحرر: الرجاء استخدام p4 status الآن.ليست هناك حاجة للقفز من خلال الأطواق بعد الآن.انظر @ColonelPanic إجابة.

في إصدار يناير 2009 من P4V، يمكنك النقر بزر الماوس الأيمن فوق أي مجلد في شجرة مساحة العمل الخاصة بك والنقر فوق "تسوية العمل دون اتصال..."

سيؤدي هذا إلى إجراء القليل من المعالجة ثم إظهار عرض الشجرة المقسمة للملفات التي لم يتم سحبها ولكن بها اختلافات عن إصدار المستودع، أو لم يتم إيداعها على الإطلاق.قد يكون هناك أيضًا بعض الفئات الأخرى التي يطرحها.

يمكنك النقر بزر الماوس الأيمن على الملفات الموجودة في طريقة العرض هذه وفحصها أو إضافتها أو حتى التراجع عنها.

إنها أداة مفيدة جدًا وقد أنقذتني عدة مرات.

يحرر:آه، السؤال المطروح حول البرامج النصية على وجه التحديد، ولكن سأترك هذه الإجابة هنا فقط في حالة.

نصائح أخرى

على نظام التشغيل Linux، أو إذا كانت لديك أدوات GNU مثبتة على نظام التشغيل Windows:

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

سيُظهر هذا رسالة خطأ لكل ملف غير محسوب.إذا كنت تريد التقاط هذا الإخراج:

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

تحت يونيكس:

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

سيؤدي هذا إلى طباعة قائمة بالملفات التي لم تتم إضافتها إلى عميلك أو مستودع Perforce.لقد استخدمت ! -name '*~' لاستبعاد الملفات التي تنتهي بـ ~.

آه، أحد كلاسيكيات Perforce :) نعم، من المؤسف حقًا أنه لا توجد طريقة سهلة لذلك مدمجة في الأوامر الافتراضية.

أسهل طريقة هي تشغيل أمر للعثور على كافة الملفات الموجودة ضمن جذر عملائك، ثم محاولة إضافتها إلى المستودع.سينتهي بك الأمر بقائمة تغيير بجميع الملفات الجديدة وسيتم تجاهل الملفات الموجودة.

مثل دير /s /b /ad | p4 -x - إضافة

(استخدم "بحث".-type f -print' من سطر أوامر nix).

إذا كنت تريد قائمة فعلية (في وحدة التحكم أو الملف)، فيمكنك توجيه نتائج الاختلاف (أو إضافتها إذا كنت تريدها أيضًا في قائمة التغيير).

إذا كنت تقوم بتشغيل هذا ضمن P4Win، فيمكنك استخدام $r لاستبدال جذر العميل لمساحة العمل الحالية.

هل يوجد مثيل ل svn status أو git status?

نعم ولكن.

اعتبارًا من الإصدار 2012.1، يوجد الأمر p4 status وفي P4V "التوفيق بين العمل دون اتصال بالإنترنت".ومع ذلك، كلاهما بطيء جدًا.لاستبعاد الملفات غير ذات الصلة، ستحتاج إلى كتابة ملف p4ignore.txt ملف لكل https://stackoverflow.com/a/13126496/284795

أشعر بأنني مضطر لإضافة إجابة، لأن الإجابة المقبولة، وبعضها الآخر، لديها ما أعتقد أنه مشكلة كبيرة:ولا يفهمون الفرق بين أمر استعلام للقراءة فقط والأمر الذي يجري التغييرات.

لا أتوقع أي رصيد لهذه الإجابة، لكنني آمل أن تساعد الآخرين على تجنب إضاعة الوقت وارتكاب الأخطاء باتباع الإجابة المقبولة ولكن غير الصحيحة من IMHO.

---+ مختصر

ربما تكون الطريقة الأكثر ملاءمة للعثور على جميع الملفات التي لم يتم تعقبها في مساحة عمل معينة هي 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, ، باستثناء بعض تفاصيل مساحة العمل المحلية مقابل اسم مسار المستودع.

لا أستطيع إلا أن أتخيل أن كل من اختار "الحالة" لأمر غير للقراءة فقط كان لديه إتقان محدود للغة الإنجليزية وأدوات التحكم الأخرى في الإصدار.

---+ P4V واجهة المستخدم الرسومية

في واجهة المستخدم الرسومية 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:

"دير /S /B /A-D" يسرد كافة الملفات الموجودة في هذا المجلد أو أسفله () بتنسيق "عاري" () باستثناء الدلائل (/إعلان).ال "سيد"يغير الشخصيات الخطرة إلى"%xx"النموذج (على غرار HTML)، و"ص4 ديك"الأمر يتحقق من هذه القائمة ("-س-") ضد الخادم الذي يتجاهل أي شيء يتعلق بالملفات التي يحدد موقعها فعليًا في المستودع ("1> لاغية:").والنتيجة هي مجموعة من الخطوط مثل:

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

وها هو!

وبدلاً من ذلك من P4Win، استخدم خيار ""Local Files not in Depot"" في لوحة العرض اليسرى.

لا أستخدم P4V كثيرًا، ولكن أعتقد أن ما يعادله هو تحديد "إخفاء ملفات مساحة العمل المحلية" في القائمة المنسدلة للمرشح في علامة التبويب عرض مساحة العمل.p4 مساعدة fstat

في P4V 2015.1 ستجد هذه الخيارات تحت زر التصفية مثل هذا:enter image description here

سريعة وقذرة:في p4v، انقر بزر الماوس الأيمن على المجلد المعني وأضف جميع الملفات الموجودة أسفله إلى قائمة التغيير الجديدة.ستحتوي قائمة التغيير الآن على كافة الملفات التي لا تعد حاليًا جزءًا من المستودع.

الأوامر التالية تنتج مخرجات تشبه الحالة، ولكن لا شيء يعادلها تمامًا svn status أو git status, ، مع تقديم ملخص من سطر واحد لحالة كل ملف:

  • p4 status
  • p4 opened
  • p4 diff -ds

ليس لدي ما يكفي من نقاط السمعة للتعليق، ولكن حل روس يسرد أيضًا الملفات المفتوحة للإضافة.ربما تفعل ذلك لا تريد استخدام إجابته لتنظيف مساحة العمل الخاصة بك.

الاستخدامات التالية 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"

=== جاك

طريقة سريعة، ولكن القليل من الأرثوذكسية.إذا لم تقم قاعدة التعليمات البرمجية بإضافة ملفات جديدة/تغيير طريقة العرض كثيرًا، فيمكنك إنشاء مستودع "git" محلي من صفحة الدفع الخاصة بك.من خلال مزامنة نظيفة، قم بـ 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.لذلك كتبت نص بايثون لذلك.الفكرة الأساسية هي التكرار من خلال الملفات والتنفيذ p4 fstat على كل.(بالطبع تجاهل التبعيات ومجلدات tmp)

يمكنك العثور عليها هنا: https://Gist.github.com/givanse/8c69f55f8243733702cf7bcb0e9290a9

في P4V، ضمن عنصر القائمة "عرض"، اختر "الملفات في المجلد" الذي يعرض علامة تبويب جديدة في الجزء الأيسر.يوجد في أقصى يمين علامات التبويب رمز صغير يظهر نافذة تسمى "الملفات في المجلد" تحتوي على رمزين.حدد الأيقونة اليسرى التي تشبه مسار التحويل وستظهر لك عدة خيارات.اختر "إظهار العناصر غير الموجودة في المستودع" وستظهر جميع الملفات الموجودة في المجلد.ثم انقر بزر الماوس الأيمن على الملف الذي تريد إضافته واختر "وضع علامة للإضافة...".يمكنك التحقق من وجوده في علامة التبويب "في انتظار المراجعة".فقط أرسل كالمعتاد (Ctrl+S).

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top