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

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

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

Ответы [ 15 ]

78 голосов
/ 09 июня 2009

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

.

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

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

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

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

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

49 голосов
/ 13 августа 2008

В 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
18 голосов
/ 19 сентября 2008

Под Unix:

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

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

12 голосов
/ 13 августа 2008

Ааа, один из классиков Perforce :) Да, это действительно отстойно, потому что ЕЩЕ НЕ ЛЕГКИЙ способ для этого встроен в команды по умолчанию.

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

Eg dir / s / b / A-D | p4 -x - добавить

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

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

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

11 голосов
/ 13 декабря 2012

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

Да, НО .

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

6 голосов
/ 08 октября 2016

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

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

--- + КРАТКОЕ

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

--- + P4V GUI

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

4 голосов
/ 08 июня 2009

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

4 голосов
/ 29 августа 2008

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

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

В P4V 2015.1 вы найдете эти опции под кнопкой фильтра, например: enter image description here

2 голосов
/ 23 марта 2012

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

1 голос
/ 18 июля 2016

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

  • p4 status
  • p4 opened
  • p4 diff -ds
...