У когось є сценарій або псевдонім для пошуку невідстежуваних (насправді: не доданих) файлів у дереві 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).