Подтвердить что ты не робот

Как удалить необработанные файлы с рабочего дерева Perforce?

Что эквивалентно "git clean" с Perforce?

git -clean - удалить необработанные файлы из рабочего дерева

Очищает рабочее дерево путем рекурсивного удаления файлов, которые не находятся под управлением версиями, начиная с текущего каталога.

-x Не используйте стандартные правила игнорирования, считанные с .gitignore (за каталог) и $GIT_DIR/info/exclude, но все равно использовать игнорирование правила, заданные с параметрами -e. Это позволяет удалить все неиспользуемые файлы, включая сборку продукции. Это может быть использовано (возможно, в сочетании с помощью git reset), чтобы создать нетронутый рабочий каталог для проверки чистой построить.

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

4b9b3361

Ответ 1

Попробуйте (для Unix) с верхнего уровня:

# Find all files and filter for those that are unknown by Perforce
find . -type f | p4 -x - fstat 2>&1 > /dev/null | sed 's/ -.*$//' > /tmp/list
### manually check /tmp/list for files you didn't mean to delete
# Go ahead and remove the unwanted files.
xargs rm < /tmp/list

Или, для чистого подхода - просто подходите прямо к xargs rm, а не сначала создавайте список файлов в/tmp/list.

Ответ 2

Используя P4V, вы можете щелкнуть правой кнопкой мыши по папке и выбрать "Reconcile Offline Work...". На средней панели ( "Локальные файлы не в депо" ) будут перечислены все файлы, которые Perforce может найти в дереве папок, которые не находятся в депо. Вы можете выбрать некоторые или все из них и щелкнуть правой кнопкой мыши и выбрать "Удалить локальный файл"

Это не script, но это намного проще, чем большинство других решений в Windows.

Ответ 3

Новый P4 чистый должен сделать трюк

Ответ 4

Нет эквивалента. Perforce не имеет команды для удаления файлов, которые не находятся под его контролем. Вы можете увидеть их в P4V, на вкладке "Рабочая область" (у них есть простые белые значки, а не выровненные значки с зеленой точкой) и удалить их вручную. Если вы хотите автоматизировать процесс, проще всего будет удалить файлы из вашей рабочей области, удалить все в каталоге и затем синхронизировать их. Пакетный файл для этого будет выглядеть примерно так:

p4 sync "//depot/someFolder/...#0"
erase C:\projects\someFolder\*.* /s /q /f
rd C:\projects\someFolder /s  /q
p4 sync -f "//depot/someFolder/..."

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


Однако это решение имеет свои недостатки. Если вы в настоящее время работаете над любым из файлов, вы, очевидно, не хотите их уничтожать. Кроме того, полная синхронизация может занять довольно много времени, если в дереве каталогов вы хотите очистить огромное количество данных.

Лучшим способом сделать это будет то, что ваша чистая утилита (я думаю, что на данный момент мы вышли за рамки пакетного файла), захватите список файлов под управлением версии с помощью команды p4 files. Затем перебирайте все файлы в каталоге, удаляя те, которые не отображаются в списке.

Ответ 5

Существуют незначительные различия в поведении между p4 clean "Восстановить файлы рабочей области в соответствии с состоянием соответствующих файлов депо" и git clean "Удалите ненужные файлы из рабочего дерева", поэтому внимательно прочитайте руководства.

В частности, vanilla p4 clean вернет изменения, внесенные вами в файлы вне любого ожидающего списка изменений. Таким образом, разумно проверить результат с опцией "сухой пробег" p4 clean -n.

Как я понимаю:

  • p4 clean -a эмулирует git clean "Удалить ненужные файлы из рабочего дерева."
  • p4 clean -a -I эмулирует git clean -x "Удалять все необработанные файлы, включая сборку продуктов."

К сожалению, нет точного аналога git clean -x "Удалить только файлы, игнорируемые Git", но вы можете приблизить его, работая с p4 reconcile:

  1. p4 reconcile -a && p4 clean -a -I. Исправленные файлы, соответствующие списку игнорирования, будут удалены, другие будут перемещены в список изменений по умолчанию.

Ответ 6

Вы не можете, разочаровываясь. Там нет аналога svn clean или git clean. Позор, это очень полезные команды.

Вот призыв на сайт Perforce для разработчиков добавить чистую команду. https://perforce.ideas.aha.io/ideas/P4V-I-7

Ответ 8

на linux вы можете сделать это без временного файла:

find . -type f | p4 -x- have 2>&1 >/dev/null  | grep "not on client" | cut -d " " -f1 | xargs -ifoo echo rm foo

Ответ 9

В Windows:

@ECHO OFF
SETLOCAL EnableDelayedExpansion
IF "%1"=="" ( 
    SET proceed=N
    ECHO Are you sure you wish to nuke all files under: 
    ECHO %CD%
    SET /P proceed="Y/N: "
    ECHO !proceed!
    IF /I "!proceed!"=="Y" (
        ECHO Nuking %cd%
        FOR /F "tokens=1 delims=-#" %%G IN ('p4 reconcile -nlad -f ...') do (
            DEL /F "%%G"
        )
    )
) ELSE IF /I "%1"=="-n" (
    ECHO Files to be deleted 1>&2
        FOR /F "tokens=1 delims=-#" %%G IN ('p4 reconcile -nlad -f ...') do (
            ECHO "%%G"
        )
) ELSE GOTO :USAGE

GOTO :STOP

:USAGE
ECHO Usage: nuke [-n]
ECHO     -n will only write the files to be deleted but will not actually delete them

:STOP

Ответ 10

Это работает намного лучше:

@ECHO OFF
SETLOCAL EnableDelayedExpansion
IF "%1"=="" ( 
    SET proceed=N
    ECHO Are you sure you wish to nuke all files under: 
    ECHO %CD%
    SET /P proceed="Y/N: "
    ECHO Looking for files to be deleted.  This may take some time depending on the depth of your tree. 1>&2
    IF /I "!proceed!"=="Y" (
        ECHO Nuking %cd%
        FOR /F "tokens=1 delims=#" %%G IN ('p4 reconcile -nla -f ...') DO (
            DEL /F %%G
        )
    )
) ELSE IF /I "%1"=="-n" (
    ECHO Looking for files to be deleted.  This may take some time depending on the depth of your tree. 1>&2
    ECHO Files to be deleted 1>&2
    FOR /F "tokens=1 delims=#" %%G IN ('p4 reconcile -nla -f ...') DO (
        ECHO %%G
    )
) ELSE GOTO :USAGE

GOTO :STOP

:USAGE
ECHO Usage: nuke [-n]
ECHO     -n will only write the files to be deleted but will not actually delete them

:STOP

Ответ 11

Я использую следующие команды в случае, если в моем списке изменений нет изменений.

  • Выполнить команду "p4 reconcile", которая позволяет скомпилировать все изменения вне Perforce (ключ -a можно использовать, если вам нужны только файлы без следа).
  • Запустить 'p4 revert path \..., v', который удаляет служебные файлы (с суффиксом v, они добавляются путем согласования) из списка изменений, но оставил их в файловой системе
  • Запустить 'p4 revert -w path \...' thet удаляет все остальные файлы из списка изменений и диска.