У когось є сценарій або псевдонім для пошуку невідстежуваних (насправді: не доданих) файлів у дереві Perforce?
РЕДАГУВАТИ: Я оновив прийняту відповідь на цю, оскільки схоже, що P4V додав підтримку для цього у випуску в січні 2009 року.
У когось є сценарій або псевдонім для пошуку невідстежуваних (насправді: не доданих) файлів у дереві Perforce?
РЕДАГУВАТИ: Я оновив прийняту відповідь на цю, оскільки схоже, що P4V додав підтримку для цього у випуску в січні 2009 року.
p4 statusне просто ЗНАЙДИТИ відстежені файли, воно фактично ПОЧАЄ ВІДСЛІДУВАТИ ЇХ. Тобто p4 statusце не запит лише для читання, як можна підозрювати з назви, а насправді це команда, яка змінює матеріали, а не файли робочої області. Це НЕ те, що повинна робити команда стану, і НЕ те, що svn statusробить. Найближче, що я можу знайти svn status, p4 reconcile -na- це -a сказати "файли, які слід додати", -n сказати "насправді нічого не змінювати". /// Я спочатку сказав щось набагато сильніше.
p4 status) , і я відповів сам. Краще вітати
p4 reconcileі p4 statusповільні, як пекло, git statusвиконуючи за 1-3 секунди.
Відповіді:
EDIT: Будь ласка, використовуйте p4 statusзараз. Більше немає потреби стрибати через обручі. Див @ ColonelPanic в відповідь .
У версії P4V від січня 2009 року ви можете клацнути правою кнопкою миші будь-яку папку у дереві робочої області та натиснути кнопку "Примирити роботу в автономному режимі ..."
Це зробить невелику обробку, а потім відобразить розділене дерево файлів, які не перевірені, але мають відмінності від версії депо або не зареєстровані взагалі. Існує навіть кілька інших категорій, які він виховує.
Ви можете клацнути правою кнопкою миші на файлах у цьому поданні та перевірити їх, додати або навіть скасувати.
Це дуже зручний інструмент, який врятував мені дупу кілька разів.
РЕДАКТУВАТИ: ах, питання, яке задається конкретно щодо сценаріїв, але я залишу цю відповідь тут про всяк випадок.
p4 statusне просто ЗНАЙТИ файли, що не відстежуються, вони фактично ПОЧАЮТЬ ВІДСЛІДЖУВАТИ ЇХ. Тобто p4 statusце не запит лише для читання, як можна підозрювати з назви, а насправді це команда, яка змінює матеріали, а не файли робочої області. Це НЕ те, що повинна робити команда стану, і НЕ те, що svn statusробить. Найближче, що я можу знайти svn status, p4 reconcile -na- це -a сказати "файли, які слід додати", -n сказати "насправді нічого не змінювати". /// Я спочатку сказав щось набагато сильніше.
p4 statusє в основному синонімом слова p4 reconcile -n. Можливо, ви бігали, p4 status -Aщо є синонімом p4 reconcile?
У 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
.p4ignoreі може попередньо переглядати та автоматично редагувати відстежувані / змінені / видалені файли.
find . -type l) і дає оманливий результат для примусово доданих файлів P4, оскільки вони містять символи @або %. Однак таких файлів у меншості, тому ручний огляд цих крайових випадків спрацює в більшості випадків.
А-а-а, одна з класик 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. Хоча я не перевірив усі ці сценарії, я часто використовую подібні сценарії, щоб заповнити недоліки команд perforce, таких як p4 reconcile -n- наприклад, часто я виявляю, що хочу локальні шляхи, а не шляхи складування або робочої області.
--- + ПОПЕРЕДЖЕННЯ
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:
" dir / S / B / AD " перераховує всі файли в цій папці або нижче неї ( / S ) у "голому" форматі ( / B ), за винятком каталогів (/ AD ). " Sed " змінює небезпечні символи на форму " % xx " (а-ля 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 voilà!
Як варіант від P4Win, скористайтеся опцією "" Локальні файли, що не перебувають у депо "на панелі перегляду зліва.
Я мало використовую P4V, але, на мою думку, еквівалентом є вибір "Сховати файли локальної робочої області" у спадному меню фільтра на вкладці Перегляд робочої області. P4 help fstat
У P4V 2015.1 ви знайдете ці параметри під кнопкою фільтра таким чином:

У мене недостатньо очок репутації, щоб коментувати, але рішення Росса також містить файли, відкриті для додавання. Ви, мабуть, ні хочете використовувати його відповідь для очищення робочого простору.
Наведене нижче використовує 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. Тож я написав для нього сценарій Python. Основна ідея - перебирати файли та виконуватиp4 fstat кожного. (звичайно ігноруючи залежності та папки tmp)
Ви можете знайти його тут: https://gist.github.com/givanse/8c69f55f8243733702cf7bcb0e9290a9
Ця команда може дати вам список файлів, які потрібно додати, відредагувати або видалити:
p4 status -aed ...
ви можете використовувати їх також окремо
p4 status -a ...
p4 status -e ...
p4 status -d ...
У P4V під пунктом меню "Перегляд" виберіть "Файли в папці", що відкриє нову вкладку в правій області. Праворуч від вкладок є маленька піктограма, яка відкриває вікно "Файли в папці" з 2 піктограмами. Виберіть ліву піктограму, яка виглядає як воронка, і ви побачите кілька варіантів. Виберіть "Показати елементи, що не містяться в депо", і всі файли в папці з'являться. Потім просто клацніть правою кнопкою миші файл, який ви хочете додати, і виберіть "Позначити для додавання ...". Ви можете переконатися, що він є на вкладці "Очікує на розгляд". Просто надішліть як зазвичай (Ctrl + S).