Ответ 1
Perforce 2013.2 имеет команду p4 status
, которая является псевдонимом для p4 reconcile -n
Я не знаю, была ли она доступна в более ранних версиях.
Как я могу удалить файлы из каталога в моей рабочей области, где файлы, которые я хочу удалить, не являются частью рабочей области?
У меня есть каталог в моей файловой системе с файлами, которые он получает от perforce, но после запуска некоторых процессов он создает несколько новых файлов в этих каталогах.
Есть ли команда perforce для удаления этих сгенерированных файлов, которые не являются частью моего рабочего пространства?
Perforce 2013.2 имеет команду p4 status
, которая является псевдонимом для p4 reconcile -n
Я не знаю, была ли она доступна в более ранних версиях.
Это моя быстрая реализация 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
для удаления. Будьте осторожны, прежде чем удалять этот список. Вы вполне можете найти то, чего не ожидали там.
Вы также можете использовать опцию "Reconcile Offline Work" в p4v и p4, чтобы выполнить это без каких-либо скриптов. В p4v щелкните правой кнопкой мыши любой каталог в представлении "Депо" и выберите "Reconcile Offline Work".
В средней панели будут "Локальные файлы не в депо". Вы можете выбрать любой или все из них, щелкнуть правой кнопкой мыши и выбрать "Удалить локальный файл".
Легко!
Если вы используете 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, я не знаю.
Вы не можете изменять/удалять файлы, не входящие в ваше рабочее пространство, изнутри. Для этого вам придется писать внешние скрипты.
Это немного неудобно в 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)."
Она может быть немного шелушащейся, если в потоке ошибок есть что-то другое, кроме этих исключений, поэтому будьте осторожны.
Вы можете использовать p4 nothave
для определения файлов, которые не управляются perforce. В зависимости от вывода p4 nothave
вы можете выполнить p4 nothave | xargs rm
, но не забудьте проверить результат p4 nothave
перед тем, как запустить его (чтобы вы случайно не удалили что-то важное).