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

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

EDIT: я обновил принятый ответ на этот вопрос, так как похоже, что в выпуске от января 2009 года добавлена ​​поддержка P4V.

Ответ 1

EDIT: Теперь используйте p4 status. Больше нет необходимости прыгать через обручи. См. @ColonelPanic answer.

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

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

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

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

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

Ответ 2

В linux, или если у вас установлены gnu-tools на окнах:

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

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

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

Ответ 3

В Unix:

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

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

Ответ 4

Ahh, одна из классиков Perforce:) Да, это действительно отстой, что STILL не является простым способом для этого встроенного в команды по умолчанию.

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

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

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

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

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

Ответ 5

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

Да, НО.

Начиная с Perforce версии 2012.1, там команда p4 status и в P4V "сконфигурирует автономную работу". Тем не менее, они оба очень медленные. Чтобы исключить ненужные файлы, вам нужно написать файл p4ignore.txt за fooobar.com/questions/19317/...

Ответ 6

В качестве альтернативы из P4Win используйте панель "Local Files not in Depot" на панели слева.

Я не очень много использую P4V, но я думаю, что эквивалент должен выбрать "Скрыть локальные файлы рабочего пространства" в раскрывающемся списке фильтра в представлении Workspace.p4 help fstat

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

Ответ 7

В своем инструменте я использую следующее: резервное копирование любых файлов в рабочей области, которые отличаются от репозитория (для 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" (a la HTML), а команда " p4 имеет" проверяет это ( " -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 & agrave;!

Ответ 8

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

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

--- + BRIEF

Вероятно, наиболее удобным способом поиска всех необработанных файлов в рабочей области perforce является p4 reconcile -na.

-a говорит: "Дайте мне файлы, которые не находятся в репозитории, то есть должны быть добавлены".

-n говорит: "Не делайте никаких изменений", т.е. сухим. (Хотя сообщения могут сказать "открыто для добавления", мысленно вы должны интерпретировать это как "будет открыто для добавления, если не -n" )

Вероятно, самый удобный способ найти все локальные изменения, сделанные в автономном режиме, - не только файлы, которые могут быть добавлены, но также файлы, которые могут быть удалены или которые были изменены без открытия для редактирования через p4 edit, p4 reconcile -n.

Несколько ответов предоставили сценарии, часто включающие p4 fstat. Хотя я не проверял все эти сценарии, я часто использую подобные скрипты, чтобы восполнить недостатки команд perforce, таких как p4 reconcile -n - например. часто я нахожу, что мне нужны локальные пути, а не пути депо Perforce или пути рабочей области.

--- + ПРЕДУПРЕЖДЕНИЕ

p4 status НЕ является аналогом команд состояния в других системах управления версиями.

p4 status НЕ является запросом только для чтения. p4 status фактически находит те же самые изменения, которые p4 reconcile делает, и добавляет их в репозиторий. p4 status, похоже, не имеет опции -n dry-run, например p4 reconcile.

Если вы делаете p4 status, посмотрите на файлы и подумайте: "О, мне это не нужны", тогда вам нужно будет p4 revert их, если вы хотите продолжить редактирование в той же рабочей области. Или изменения, которые p4 status, добавленные в ваш набор изменений, будут проверены в следующий раз.

Кажется, мало или нет причин использовать p4 status, а не p4 reconcile -n, за исключением некоторых деталей локальной рабочей области и имени пути депо.

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

--- + P4V GUI

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

Ответ 9

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

Ответ 10

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

  • p4 status
  • p4 opened
  • p4 diff -ds

Ответ 11

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

Ниже используется 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

Ответ 12

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

Ответ 13

//вывести вывод p4 fstat в 'выходной файл'

my $status = system "(find. -type f -print0 | xargs -0 p4 fstat > /dev/null) > & $outputFile";

//чтение выходного файла   открыть F1, $outputFile или умереть "$!\n";

while (<F1>){
  chomp $_;

//grep-строки, у которых "нет такого файла" или "нет в клиенте"

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

//Удаление содержимого после '-'

     $_=~ s/-\s.*//g;

//строка ниже необязательна. Проверьте выходной файл ur для большей ясности.        $ _ = ~ s/^.///g;

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

Или вы можете использовать reconcile -n -m...

Если он "открыт для удаления", он был удален из рабочей области. Обратите внимание, что приведенная выше команда работает в режиме предварительного просмотра ('-n').

Ответ 14

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