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

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

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

Есть ли команда 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 перед запуском (чтобы случайно не удалить что-то важное).

Другие вопросы по тегам