У кого-нибудь есть script или псевдоним, чтобы найти необработанные (действительно: неадресные) файлы в дереве Perforce?
EDIT: я обновил принятый ответ на этот вопрос, так как похоже, что в выпуске от января 2009 года добавлена поддержка P4V.
У кого-нибудь есть script или псевдоним, чтобы найти необработанные (действительно: неадресные) файлы в дереве Perforce?
EDIT: я обновил принятый ответ на этот вопрос, так как похоже, что в выпуске от января 2009 года добавлена поддержка P4V.
EDIT: Теперь используйте p4 status
. Больше нет необходимости прыгать через обручи. См. @ColonelPanic answer.
В версии P4V, выпущенной в январе 2009 года, вы можете щелкнуть правой кнопкой мыши по любой папке в дереве рабочей области и нажать "Сконфигурировать автономную работу..."
Это приведет к небольшой обработке, а затем приведет к просмотру разделенных деревом файлов, которые не были извлечены, но имеют отличия от версии хранилища или вообще не отмечены. Там может быть даже несколько других категорий.
Вы можете щелкнуть правой кнопкой мыши по файлам в этом представлении и проверить их, добавить их или даже вернуть их.
Это очень удобный инструмент, который несколько раз спасал мою задницу.
РЕДАКТИРОВАТЬ: ах вопрос о скриптах специально, но я оставлю этот ответ здесь на всякий случай.
В linux, или если у вас установлены gnu-tools на окнах:
find . -type f -print0 | xargs -0 p4 fstat >/dev/null
Это покажет сообщение об ошибке для каждого неучтенного файла. Если вы хотите записать этот вывод:
find . -type f -print0 | xargs -0 p4 fstat >/dev/null 2>mylogfile
В Unix:
find -type f ! -name '*~' -print0| xargs -0 p4 fstat 2>&1|awk '/no such file/{print $1}'
Это приведет к распечатке списка файлов, которые не добавлены в ваш клиент или в хранилище Perforce. Я использовал ! -name '*~'
для исключения файлов, заканчивающихся на ~.
Ahh, одна из классиков Perforce:) Да, это действительно отстой, что STILL не является простым способом для этого встроенного в команды по умолчанию.
Самый простой способ - запустить команду, чтобы найти все файлы под вашим корнем клиентов, а затем попытаться добавить их в хранилище. Вы получите список изменений всех новых файлов, а существующие файлы будут проигнорированы.
Например, dir/s/b/A-D | p4 -x - добавить
(используйте 'find. -type f -print' из командной строки nix).
Если вам нужен физический список (в консоли или файле), вы можете передать результаты diff (или добавить, если вы также хотите их в списке изменений).
Если вы используете это в P4Win, вы можете использовать $r для замены корня клиента текущей рабочей области.
Есть ли аналог
svn status
илиgit status
?
Да, НО.
Начиная с Perforce версии 2012.1, там команда p4 status
и в P4V "сконфигурирует автономную работу". Тем не менее, они оба очень медленные. Чтобы исключить ненужные файлы, вам нужно написать файл p4ignore.txt
за fooobar.com/questions/19317/...
В качестве альтернативы из P4Win используйте панель "Local Files not in Depot" на панели слева.
Я не очень много использую P4V, но я думаю, что эквивалент должен выбрать "Скрыть локальные файлы рабочего пространства" в раскрывающемся списке фильтра в представлении Workspace.p4 help fstat
В P4V 2015.1 вы найдете эти параметры под кнопкой фильтра следующим образом:
В своем инструменте я использую следующее: резервное копирование любых файлов в рабочей области, которые отличаются от репозитория (для Windows). Он обрабатывает некоторые нечетные случаи, которые Perforce не очень нравится, например встроенные пробелы, звезды, проценты и хэш-метки:
dir /S /B /A-D | sed -e "s/%/%25/g" -e "s/@/%40/g" -e "s/#/%23/g" -e "s/\*/%2A/g" | p4 -x- have 1>NUL:
" dir/S/B/AD" перечислены все файлы в этой папке или ниже этой папки (/S) в "голом" формате (/B), исключая каталоги (/ AD). " sed" изменяет опасные символы в форме "% xx" (a la HTML), а команда " p4 имеет" проверяет это ( " -x -" ) против сервера, отбрасывающего что-либо о файлах, которые он фактически находит в репозитории ( " 1 > NUL:" ). В результате получается множество строк, например:
Z:\No_Backup\Workspaces\full\depot\Projects\Archerfish\Portal\Main\admin\html\images\nav\navxx_background.gif - file(s) not on client.
Et voil & agrave;!
Я чувствую, что хочу добавить ответ, так как принятый ответ и некоторые другие имеют то, что, по моему мнению, является серьезной проблемой: они не понимают разницы между командой запроса только для чтения и командой, которая делает изменения.
Я не ожидаю никакой благодарности за этот ответ, но я надеюсь, что это поможет другим избежать траты времени и ошибок, следуя принятому, но IMHO некорректному ответу.
--- + BRIEF
Вероятно, наиболее удобным способом поиска всех необработанных файлов в рабочей области perforce является p4 reconcile -na
.
-a
говорит: "Дайте мне файлы, которые не находятся в репозитории, то есть должны быть добавлены".
-n
говорит: "Не делайте никаких изменений", т.е. сухим. (Хотя сообщения могут сказать "открыто для добавления", мысленно вы должны интерпретировать это как "будет открыто для добавления, если не -n" )
Вероятно, самый удобный способ найти все локальные изменения, сделанные в автономном режиме, - не только файлы, которые могут быть добавлены, но также файлы, которые могут быть удалены или которые были изменены без открытия для редактирования через p4 edit
, p4 reconcile -n
.
Несколько ответов предоставили сценарии, часто включающие p4 fstat
. Хотя я не проверял все эти сценарии, я часто использую подобные скрипты, чтобы восполнить недостатки команд perforce, таких как p4 reconcile -n
- например. часто я нахожу, что мне нужны локальные пути, а не пути депо Perforce или пути рабочей области.
--- + ПРЕДУПРЕЖДЕНИЕ
p4 status
НЕ является аналогом команд состояния в других системах управления версиями.
p4 status
НЕ является запросом только для чтения. p4 status
фактически находит те же самые изменения, которые p4 reconcile
делает, и добавляет их в репозиторий. p4 status
, похоже, не имеет опции -n
dry-run, например p4 reconcile
.
Если вы делаете p4 status
, посмотрите на файлы и подумайте: "О, мне это не нужны", тогда вам нужно будет p4 revert
их, если вы хотите продолжить редактирование в той же рабочей области. Или изменения, которые p4 status
, добавленные в ваш набор изменений, будут проверены в следующий раз.
Кажется, мало или нет причин использовать p4 status
, а не p4 reconcile -n
, за исключением некоторых деталей локальной рабочей области и имени пути депо.
Я могу только представить, что тот, кто выбрал "статус" для команды без чтения, имел ограниченную команду в отношении английского языка и других инструментов управления версиями.
--- + P4V
GUI
В GUI P4V
команда reconcile находит локальные изменения, которые, возможно, необходимо будет добавить, удалить или открыть для редактирования. К счастью, он не добавляет их в список изменений по умолчанию; но вы по-прежнему можете быть осторожны, чтобы закрыть окно согласования после проверки его, если вы не хотите фиксировать изменения.
Quick 'n Dirty: в p4v щелкните правой кнопкой мыши на соответствующей папке и добавьте все файлы под ним в новый список изменений. Список изменений теперь будет содержать все файлы, которые в настоящее время не являются частью депо.
Следующие команды производят вывод состояния, но ни один из них не эквивалентен svn status
или git status
, предоставляя однострочное резюме состояния каждого файла:
p4 status
p4 opened
p4 diff -ds
У меня недостаточно комментариев для комментариев, но решение Росса также содержит файлы, которые открыты для добавления. Вероятно, вы не хотите использовать свой ответ, чтобы очистить рабочее пространство.
Ниже используется p4 fstat
(спасибо Mark Harrison) вместо p4 have
, и перечислены файлы, которые не находятся в хранилище и, не открываются для добавления.
dir /S /B /A-D | sed -e "s/%/%25/g" -e "s/@/%40/g" -e "s/#/%23/g" -e "s/\*/%2A/g" | p4 -x- fstat 2>&1 | sed -n -e "s/ - no such file[(]s[)]\.$//gp"
=== Jac
Быстрый метод, но мало православный. Если кодовая база не добавляет новые файлы/изменить просмотр слишком часто, вы можете создать локальный репозиторий "git" из вашей проверки. От чистой синхронизации perforce, git init, добавьте и скопируйте все файлы локально. git статус выполняется быстро и покажет файлы, которые ранее не были зафиксированы.
//вывести вывод p4 fstat в 'выходной файл'
my $status = system "(find. -type f -print0 | xargs -0 p4 fstat > /dev/null) > & $outputFile";
//чтение выходного файла открыть F1, $outputFile или умереть "$!\n";
while (<F1>){
chomp $_;
//grep-строки, у которых "нет такого файла" или "нет в клиенте"
if($_ =~ m/no such file/ || $_ =~ m/not in client/){
//Удаление содержимого после '-'
$_=~ s/-\s.*//g;
//строка ниже необязательна. Проверьте выходной файл ur для большей ясности. $ _ = ~ s/^.///g;
print "$_\n";
}
}
close F1;
Или вы можете использовать reconcile -n -m...
Если он "открыт для удаления", он был удален из рабочей области. Обратите внимание, что приведенная выше команда работает в режиме предварительного просмотра ('-n').
В P4V в пункте меню "Вид" выберите "Файлы в папке", в котором отображается новая вкладка в правой панели. В крайнем правом углу вкладки есть значок, который вызывает окно под названием "Файлы в папке" с двумя значками. Выберите значок слева, который похож на воронку, и вы увидите несколько вариантов. Выберите "Показывать элементы не в Depot", и все файлы в папке будут отображаться. Затем просто щелкните правой кнопкой мыши файл, который вы хотите добавить, и выберите "Отметить для добавления...". Вы можете проверить, есть ли он на вкладке "Ожидание". Просто отправьте как обычно (Ctrl + S).