В perforce, как я могу удалить файлы из каталога в моей рабочей области, где файлы не являются частью рабочего пространства?

Как я могу удалить файлы из каталога в моей рабочей области, где файлы, которые я хочу удалить, не являются частью рабочей области?

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

Есть ли команда perforce для удаления этих сгенерированных файлов, которые не являются частью моего рабочего пространства?

Ответ 1

Perforce 2013.2 имеет команду p4 status, которая является псевдонимом для p4 reconcile -n

Я не знаю, была ли она доступна в более ранних версиях.

Ответ 2

Это моя быстрая реализация p4 nothave.

#!/bin/bash
#
# List files present, but not in perforce.

tmpd="$(mktemp -d /tmp/nothave.XXXXXXXX)"
trap "rm -rf $tmpd" EXIT HUP INT QUIT TERM

p4 have | awk -F' - ' '{print $2}' | sort >$tmpd/have.txt

root=$(p4 info | awk -F': ' '$1=="Client root"{print $2}')
find $root -type f | sort >$tmpd/find.txt

comm -13 $tmpd/have.txt $tmpd/find.txt

Это приведет к созданию списка файлов, который затем может быть отправлен в xargs rm для удаления. Будьте осторожны, прежде чем удалять этот список. Вы вполне можете найти то, чего не ожидали там.

Ответ 3

Вы также можете использовать опцию "Reconcile Offline Work" в p4v и p4, чтобы выполнить это без каких-либо скриптов. В p4v щелкните правой кнопкой мыши любой каталог в представлении "Депо" и выберите "Reconcile Offline Work".

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

Легко!

Ответ 4

Если вы используете Linux/Unix, в семействе оболочек Bourne вы можете ввести

find . -type f | p4 -x- files 2>&1| grep "no such file" | cut -f1 -d" " | xargs rm

Аналогично, для символических ссылок введите

find . -type l | p4 -x- files 2>&1| grep "no such file" | cut -f1 -d" " | xargs rm

Выше буквы "el", а не "один".

Есть ли эквивалент в Windows, я не знаю.

Ответ 5

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

Ответ 6

Это немного неудобно в powershell, потому что p4 отправляет сообщение can't-find-file в поток ошибок, а не std out.

ps > $error.clear()
ps > dir | %{p4 fstat -T "haveRev" $_} 2>$null
ps > $error | %{$_.Exception.ToString().Split()[1]} | %{del $_}

Вторая строка должна содержать ошибки, такие как "FILENAME.EXT - no such file(s)." Она может быть немного шелушащейся, если в потоке ошибок есть что-то другое, кроме этих исключений, поэтому будьте осторожны.

Ответ 7

Вы можете использовать p4 nothave для определения файлов, которые не управляются perforce. В зависимости от вывода p4 nothave вы можете выполнить p4 nothave | xargs rm, но не забудьте проверить результат p4 nothave перед тем, как запустить его (чтобы вы случайно не удалили что-то важное).