Как найти неотслеживаемые файлы в дереве Perforce? (аналог статуса svn)

У кого-нибудь есть сценарий или псевдоним для поиска неотслеживаемых (действительно: не добавленных) файлов в дереве Perforce?

РЕДАКТИРОВАТЬ: Я обновил принятый ответ на этот, так как похоже, что P4V добавил поддержку для этого в выпуске в январе 2009 года.

12.08.2008 21:44:32
Я не могу себе представить, как получилось, что в наиболее часто используемом корпоративном инструменте SCM эта функциональность отсутствует. Вероятно, все их разработчики используют только графический интерфейс.
sorin 28.09.2010 16:27:37
О, за то, что громко плачу !!!! Принятый p4 statusне просто НАЙТИ неотслеживаемые файлы, он фактически НАЧИНАЕТ ИХ отслеживать. Т.е. p4 statusэто не только для чтения запрос, как можно было бы догадаться по названию, но на самом деле это команда, которая меняет материал, а не файлы рабочей области. Это НЕ то, что должна делать команда статуса, а НЕ то, что svn statusделает. Самая близкая вещь, которую я могу найти, svn statusэто p4 reconcile -na-a сказать "файлы, которые должны быть добавлены", -n сказать "на самом деле ничего не менять". /// Изначально я сказал что-то намного сильнее.
Krazy Glew 8.10.2016 19:39:27
Я восстановил stackoverflow.com/questions/9642531/… , который был неправильно помечен как дубликат stackoverflow.com/questions/9272/… , как новый вопрос (Что такое команда p4, эквивалентная чему-то вроде git / hg / bzr / svn статус? (намек: нет p4 status) , и сам ответил. Лучше приветствовал
Krazy Glew 8.10.2016 22:34:12
Оба p4 reconcileи p4 statusмедленны до чертиков, а git statusзавершили выполнение за 1-3 секунды.
zwcloud 19.07.2019 08:17:07
15 ОТВЕТОВ
РЕШЕНИЕ

РЕДАКТИРОВАТЬ: Пожалуйста, используйте p4 statusсейчас. Больше не нужно прыгать через обручи. Смотрите ответ @ ColonelPanic .

В версии P4V, выпущенной в январе 2009 года, вы можете щелкнуть правой кнопкой мыши любую папку в дереве рабочей области и выбрать «согласовать автономную работу ...»

Это немного обработает, а затем отобразит разделенное дерево файлов, которые не были извлечены, но имеют отличия от версии депо или вообще не зарегистрированы. Там может быть даже несколько других категорий.

Вы можете щелкнуть правой кнопкой мыши файлы в этом представлении и проверить их, добавить их или даже отменить их.

Это очень удобный инструмент, который несколько раз спас мою задницу.

РЕДАКТИРОВАТЬ: ах вопрос, заданный конкретно о скриптах, но я оставлю этот ответ здесь на всякий случай.

81
23.05.2017 11:55:13
В этом вопросе добавлено решение powershell: stackoverflow.com/questions/3217152/…
tenpn 10.07.2010 12:51:16
Отражает ли это каждый файл против версии в репо? У меня большой репо и медленное соединение (при работе из дома). Это может занять вечность!
gdw2 23.03.2012 17:46:21
Я не думаю, что это полная разница, но это не быстро.
tenpn 26.03.2012 08:59:07
О, за то, что громко плачу !!!! p4 statusне просто НАЙТИ неотслеживаемые файлы, он фактически НАЧИНАЕТ отслеживать их. Т.е. p4 statusэто не только для чтения запрос, как можно было бы догадаться по названию, но на самом деле это команда, которая меняет материал, а не файлы рабочей области. Это НЕ то, что должна делать команда статуса, а НЕ то, что svn statusделает. Самая близкая вещь, которую я могу найти, svn statusэто p4 reconcile -na-a сказать "файлы, которые должны быть добавлены", -n сказать "на самом деле ничего не менять". /// Изначально я сказал что-то намного сильнее.
Krazy Glew 8.10.2016 19:36:42
p4 statusв основном синоним для p4 reconcile -n. Возможно, вы запустили p4 status -Aсиноним p4 reconcile?
Samwise 19.06.2017 15:36:16

Ааа, один из классиков Perforce :) Да, это действительно отстойно, потому что ВСЕ ЕЩЕ нет простого способа встроить в команды по умолчанию.

Самый простой способ - запустить команду, чтобы найти все файлы в корневом каталоге клиентов, а затем попытаться добавить их в хранилище. Вы получите список изменений всех новых файлов, а существующие файлы игнорируются.

Например, dir / s / b / AD | p4 -x - добавить

(используйте 'find. -type f -print' из командной строки nix).

Если вам нужен физический список (в консоли или в файле), вы можете направить результаты сравнения (или добавить, если вы также хотите, чтобы они были в списке изменений).

Если вы используете это в P4Win, вы можете использовать $ r для замены клиентского корня текущего рабочего пространства.

12
12.08.2008 21:55:08

В Linux, или если у вас установлен gnu-tools в Windows:

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

Это покажет сообщение об ошибке для каждого неучтенного файла. Если вы хотите захватить этот вывод:

find . -type f -print0 | xargs -0 p4 fstat >/dev/null 2>mylogfile
50
12.08.2008 21:56:45
Перенаправление stderr на stdout позволит вам выполнить дополнительную фильтрацию или другие операции. Например, чтобы просмотреть прокручиваемый список файлов Java: найдите. -тип f -print0 | xargs -0 p4 fstat 2> & 1> / dev / null | grep '\ .java' | меньше
Jon Nadal 27.11.2012 20:35:26
Это занимает безумно много времени в моей рабочей области с 60K-файлами. Я написал скрипт на python, который выполняет ту же работу менее чем за 10 секунд: p5 . Он также поддерживает .p4ignoreи может просматривать и автоматически редактировать неотслеживаемые / измененные / удаленные файлы.
hamstergene 2.10.2013 11:53:54
@hamstergene, очень мило!
Mark Harrison 2.10.2013 18:42:00
Написал небольшой скрипт, который делает именно это, если кому-то интересно (в том числе аргумент dir, аргумент максимальной глубины и вывод в stdout).
Arnon Zilca 27.04.2015 10:52:26
Спасибо; Я нашел это полезным! Обратите внимание, что это не обрабатывает symlinks ( find . -type l) и дает вводящий в заблуждение вывод для файлов P4, принудительно добавляемых, поскольку они содержат символы @или %. Тем не менее, такие файлы находятся в меньшинстве, поэтому ручной обзор этих крайних случаев будет работать в большинстве случаев.
CJBS 11.06.2015 21:12:40

В качестве альтернативы из P4Win, используйте опцию «« Локальные файлы не в хранилище »на левой панели просмотра.

Я не очень часто использую P4V, но я думаю, что эквивалентно выбрать «Скрыть локальные файлы рабочей области» в раскрывающемся списке фильтра в представлении «Рабочая область». P4 help fstat

В P4V 2015.1 вы найдете эти опции под кнопкой фильтра, например: введите описание изображения здесь

4
7.07.2016 01:11:37
Это показывает только файлы в текущем каталоге, к сожалению :(
JP P. 16.10.2017 15:38:14

Под Unix:

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

Это распечатает список файлов, которые не добавлены в ваш клиент или хранилище Perforce. Я использовал ! -name '*~'для исключения файлов, заканчивающихся на ~.

19
19.09.2008 06:55:08

Я использую следующее в своем инструменте, который создает резервные копии любых файлов в рабочей области, которые отличаются от хранилища (для 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.

И вуаля!

4
8.06.2009 18:59:57
Это отличное решение, и до сих пор работает с версией P4 2015.1
Rian Sanderson 6.07.2016 23:43:15
очень быстро! команда find / xargs исчерпает память и работает медленно. При добавлении в файл .bat вспомните двойные%.
kevinf 19.06.2017 15:00:15

Quick 'n Dirty: В p4v щелкните правой кнопкой мыши по нужной папке и добавьте все файлы под ней в новый список изменений. Список изменений теперь будет содержать все файлы, которые в настоящее время не являются частью хранилища.

2
23.03.2012 18:11:26

Есть ли аналог svn statusили git status?

Да, НО .

Начиная с версии Perforce 2012.1, p4 statusв P4V есть команда «согласовать автономную работу». Тем не менее, они оба очень медленные. Чтобы исключить ненужные файлы, вам нужно написать p4ignore.txtфайл по адресу https://stackoverflow.com/a/13126496/284795

11
23.05.2017 10:29:49
p4 statusПосле выпуска 2012.1 было несколько улучшений производительности . Если вы держались подальше из- p4 statusза проблем с производительностью, возможно, стоит проверить его еще раз, чтобы увидеть, как он себя сейчас ведет.
Bryan Pendleton 7.07.2016 03:44:14

В P4V, в пункте меню «Вид» выберите «Файлы в папке», который открывает новую вкладку в правой панели. Справа от вкладок есть небольшая иконка, которая вызывает окно под названием «Файлы в папке» с двумя иконками. Выберите левый значок, который выглядит как воронка, и вы увидите несколько вариантов. Выберите «Показать элементы не в хранилище», и все файлы в папке будут отображаться. Затем просто щелкните правой кнопкой мыши файл, который вы хотите добавить, и выберите «Отметить для добавления ...». Вы можете проверить это там во вкладке "Ожидание". Просто отправьте как обычно (Ctrl + S).

-1
19.09.2013 22:07:42

У меня недостаточно очков репутации, чтобы комментировать, но в решении Росса также перечислены файлы, которые открыты для добавления. Вы, вероятно, не хотите использовать его ответ для очистки вашего рабочего пространства.

Следующее использует p4 fstat(спасибо Mark Harrison) вместо 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"

=== Jac

0
20.04.2016 16:19:17

Следующие команды производят вывод, подобный состоянию, но ни одна из них не является полностью эквивалентной svn statusили git status, предоставляя сводную информацию о состоянии каждого файла в одну строку:

  • p4 status
  • p4 opened
  • p4 diff -ds
1
18.07.2016 10:22:18

Я чувствую необходимость добавить ответ, поскольку принятый ответ и некоторые другие имеют, как мне кажется, существенную проблему: они не понимают разницы между командой запроса только для чтения и командой, которая вносит изменения.

Я не ожидаю никакой оценки этому ответу, но надеюсь, что он поможет другим избежать потери времени и ошибок, следуя принятому, но ИМХО неправильному ответу.

--- + КРАТКОЕ ОПИСАНИЕ

Вероятно, наиболее удобный способ найти все неотслеживаемые файлы в рабочей области Perforce 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для некоторых деталей локальной рабочей области против депо имени пути , за исключением.

Я могу только представить, что тот, кто выбрал «status» для команды, не предназначенной только для чтения, имел ограниченное владение английским языком и другими инструментами контроля версий.

--- + P4VGUI

В графическом интерфейсе p4vкоманда согласования находит локальные изменения, которые, возможно, необходимо добавить, удалить или открыть для редактирования. К счастью, он не добавляет их в список изменений по умолчанию; но вы все равно можете быть осторожны, чтобы закрыть окно согласования после проверки, если вы не хотите зафиксировать изменения.

7
8.10.2016 22:39:40
Состояние p4 не добавляет файлы. Похоже, что он работает как и задокументирован как «примирить -n». ты уверен, что это меняет вещи?
kdubs 12.04.2018 12:39:21

Быстрый метод, но мало ортодоксальный. Если кодовая база не добавляет новые файлы / изменяет представление слишком часто, вы можете создать локальный репозиторий 'git' из своей проверки. От чистой синхронизации выполнения, git init, добавьте и передайте все файлы локально. Состояние Git быстрое и покажет файлы, ранее не зафиксированные.

0
19.06.2017 15:06:04

Команда 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).

0
9.04.2018 19:26:53
Пожалуйста, не просто бросайте какой-либо код без объяснения в качестве ответа, но добавьте некоторое объяснение, чтобы помочь ОП понять код и выучить что-то. :)
Markus 19.10.2017 07:33:02

Мне нужно что-то, что будет работать в Linux, Mac или Windows. Поэтому я написал для него скрипт на Python. Основная идея состоит в том, чтобы перебирать файлы и выполнять p4 fstatкаждый из них. (конечно же игнорируя зависимости и папки tmp)

Вы можете найти его здесь: https://gist.github.com/givanse/8c69f55f8243733702cf7bcb0e9290a9

0
2.05.2018 19:40:16