Как я могу удалить файлы из каталога в моей рабочей области, где файлы не являются частью рабочей области?
Как я могу удалить файлы из каталога в моей рабочей области, где файлы, которые я хочу удалить, не являются частью рабочей области?
В моей файловой системе есть каталог с файлами, которые он получает из перформанса, но после запуска некоторых процессов он создает новые файлы в этих каталогах.
Есть ли команда Perforce для удаления этих сгенерированных файлов, которые не являются частью моего рабочего пространства?
7 ответов
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
для того, чтобы быть удаленным. Будьте внимательны, чтобы проверить список перед удалением. Вы можете найти вещи, которые вы не ожидали там.
Вы также можете использовать опцию "Согласовать автономную работу" в p4v и p4, чтобы выполнить это без каких-либо сценариев. В p4v щелкните правой кнопкой мыши любой каталог в представлении Depot и выберите "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
Над буквой "эль", а не "один".
Есть ли аналог в Windows, я не знаю.
Это немного неловко в powershell, потому что p4 отправляет сообщение о невозможности найти файл в поток ошибок, а не в 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
определить файлы, которые не управляются по исполнению. В зависимости от выхода p4 nothave
вы могли бы сделать p4 nothave | xargs rm
, но обязательно проверьте результат p4 nothave
перед запуском (чтобы случайно не удалить что-то важное).