Как найти неотслеживаемые файлы в дереве Perforce?(аналог статуса svn)

StackOverflow https://stackoverflow.com/questions/9272

  •  08-06-2019
  •  | 
  •  

Вопрос

У кого-нибудь есть скрипт или псевдоним, чтобы найти неотслеживаемый (на самом деле:не добавленные) файлы в принудительном дереве?

Редактировать:Я обновил принятый ответ на этот вопрос, поскольку, похоже, P4V добавил поддержку для этого в выпуске за январь 2009 года.

Это было полезно?

Решение

Редактировать: Пожалуйста, используйте p4 status сейчас же.Больше нет необходимости прыгать через обручи.Смотрите у @Colonelpanic's ответ.

В версии P4V от января 2009 года вы можете щелкнуть правой кнопкой мыши по любой папке в дереве вашего рабочего пространства и выбрать "согласовать автономную работу ..."

Это произведет небольшую обработку, а затем отобразит разделенное древовидное представление файлов, которые не были извлечены, но имеют отличия от версии depot или вообще не были возвращены.Возможно, там даже есть несколько других категорий, которые он поднимает.

Вы можете щелкнуть правой кнопкой мыши по файлам в этом представлении и просмотреть их, добавить или даже отменить их.

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

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

Другие советы

В Linux или, если у вас установлены gnu-tools в Windows:

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 depot.Я использовал ! -name '*~' чтобы исключить файлы, заканчивающиеся на ~.

Аааа, одна из классических игр Perforce :) Да, это действительно отстой, что до сих пор нет простого способа для этого, встроенного в команды по умолчанию.

Самый простой способ - запустить команду для поиска всех файлов в корневом каталоге ваших клиентов, а затем попытаться добавить их в хранилище.В итоге вы получите список изменений всех новых файлов, а существующие файлы будут проигнорированы.

Например, dir /s /b /A-D | p4 -x - добавить

(используйте 'найти .-введите f -print' из командной строки nix).

Если вам нужен физический список (в консоли или файле), то вы можете передать результаты diff (или добавить, если вы также хотите, чтобы они были в списке изменений).

Если вы запускаете это в P4Win, вы можете использовать $r для замены клиентского корня текущей рабочей области.

Есть ли аналог svn status или git status?

Да, НО.

Начиная с принудительной версии 2012.1, существует команда p4 status и в P4V "согласовать автономную работу".Однако они оба работают очень медленно.Чтобы исключить нерелевантные файлы, вам нужно будет написать p4ignore.txt файл на https://stackoverflow.com/a/13126496/284795

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

Я не ожидаю никакой оценки за этот ответ, но я надеюсь, что это поможет другим избежать пустой траты времени и совершения ошибок, следуя принятому, но, ИМХО, неправильному ответу.

---+ КРАТКОЕ ОПИСАНИЕ

Вероятно, самый удобный способ найти все неотслеживаемые файлы в рабочей области perforce - это p4 reconcile -na.

-a говорит: "дайте мне файлы, которых нет в репозитории, т.е.это следует добавить ".

-n говорит "не вносить никаких изменений", т.е.пробный запуск.(Хотя в сообщениях может быть написано "открыто для добавления", мысленно вы должны интерпретировать это как "было бы открыто для добавления, если бы не -n")

Вероятно, это самый удобный способ найти все локальные изменения, сделанные в автономном режиме - не только файлы, которые, возможно, потребуется добавить, но и файлы, которые, возможно, потребуется удалить или которые были изменены без открытия для редактирования через p4 edit, является p4 reconcile -n.

В нескольких ответах были представлены сценарии, часто включающие p4 fstat.Хотя я не проверял все эти сценарии, я часто использую похожие сценарии, чтобы компенсировать недостатки принудительных команд, таких как p4 reconcile -n - например ,часто я обнаруживаю, что мне нужны локальные пути, а не принудительные пути к хранилищу или рабочему пространству.

---+ ПРЕДУПРЕЖДЕНИЕ

p4 status НЕ является аналогом команд состояния в других системах контроля версий.

p4 status это НЕ запрос, доступный только для чтения. p4 status на самом деле обнаруживает те же изменения, что и p4 reconcile выполняет и добавляет их в репозиторий. p4 status похоже, у него нет -n вариант сухого прогона, такой как p4 reconcile делает.

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

Кажется, что причин для использования практически нет p4 status вместо того , чтобы p4 reconcile -n, за исключением некоторых деталей локального рабочего пространства и пути к хранилищу.

Я могу только представить, что тот, кто выбрал "status" для команды, недоступной только для чтения, имел ограниченное владение английским языком и другими инструментами контроля версий.

---+ P4V Графический интерфейс ПОЛЬЗОВАТЕЛЯ

В графическом интерфейсе p4v, Команда "Согласовать" находит локальные изменения, которые, возможно, потребуется добавить, удалить или открыть для редактирования.К счастью, по умолчанию он не добавляет их в список изменений;но вы все равно можете быть осторожны и закрыть окно согласования после его просмотра, если не хотите фиксировать изменения.

Я использую следующее в своем инструменте, который создает резервные копии любых файлов в рабочей области, которые отличаются от репозитория (для Windows).Он обрабатывает некоторые странные случаи, которые волей-неволей не очень нравятся, такие как встроенные пробелы, звездочки, проценты и хэш-метки:

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:

"режиссер /S /B /A-D" содержит список всех файлов в этой папке или ниже нее () в "голом" формате (/B) исключая каталоги (/A-D).Тот самый "сэд" меняет опасных персонажей на своих "%xx" форма (а-ля 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à!

В качестве альтернативы из P4Win используйте опцию "Локальные файлы, которых нет в хранилище" на панели просмотра слева.

Я не часто использую P4V, но я думаю, что эквивалентом является выбор "Скрыть локальные файлы рабочей области" в раскрывающемся списке "Фильтр" на вкладке "Просмотр рабочей области".p4 справка fstat

В P4V 2015.1 вы найдете эти параметры под кнопкой фильтровать следующим образом:enter image description here

Быстрый и Грязный:В p4v щелкните правой кнопкой мыши на соответствующей папке и добавьте все файлы под ней в новый список изменений.Список изменений теперь будет содержать все файлы, которые в данный момент не являются частью хранилища.

Следующие команды выдают вывод, подобный статусу, но ни одна из них не является полностью эквивалентной svn status или git status, предоставляющий краткую информацию о состоянии каждого файла в одну строку:

  • p4 status
  • p4 opened
  • p4 diff -ds

У меня недостаточно очков репутации, чтобы комментировать, но в решении Росса также перечислены файлы, которые открыты для добавления.Ты, наверное, знаешь нет хотите использовать его ответ для очистки вашего рабочего пространства.

Следующие виды применения p4 fstat (спасибо Марку Харрисону) вместо 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" из вашей проверки.Из чистой принудительной синхронизации выполните git init, добавьте и зафиксируйте все файлы локально.Состояние Git выполняется быстро и показывает файлы, которые ранее не были зафиксированы.

Тот Самый p4 fstat команда позволяет проверить, существует ли файл в рабочей области, объединить с find чтобы найти файлы для проверки, как в следующем примере Perl:

// throw the output of p4 fstat to a 'output file'
// find:
//  -type f  :-  only look at files,
//  -print0  :-  terminate strings with \0s to support filenames with spaces
// xargs:
//  Groups its input into command lines,
//  -0       :-  read input strings terminated with \0s
// p4:
//  fstat    :-  fetch workspace stat on files

my $status=system "(find . -type f -print0 | xargs -0 p4 fstat > /dev/null) >& $outputFile";

// read output file
open F1, $outputFile or die "$!\n";

// iterate over all the lines in F1
while (<F1>) {
  // remove trailing whitespace
  chomp $_;

  // grep lines which has 'no such file' or 'not in client'
  if($_ =~ m/no such file/ || $_ =~ m/not in client/){

     // Remove the content after '-'
     $_=~ s/-\s.*//g;

     // below line is optional. Check ur output file for more clarity.
     $_=~ s/^.\///g;

     print "$_\n";
  }
}

close F1;

Или вы можете использовать p4 reconcile -n -m ...

Если он "открыт для удаления", значит, он был удален из рабочей области.Обратите внимание, что приведенная выше команда выполняется в режиме предварительного просмотра (-n).

Мне нужно было что-то, что работало бы в Linux, Mac или Windows.Поэтому я написал для этого скрипт на Python.Основная идея заключается в переборе файлов и выполнении p4 fstat на каждом.(конечно, игнорируя зависимости и папки tmp)

Вы можете найти его здесь: https://gist.github.com/givanse/8c69f55f8243733702cf7bcb0e9290a9

В P4V в пункте меню "Вид" выберите "Файлы в папке", после чего откроется новая вкладка на правой панели.В крайнем правом углу вкладок есть маленький значок, который открывает окно под названием "Файлы в папке" с двумя значками.Выберите значок слева, который выглядит как воронка, и вы увидите несколько вариантов.Выберите "Показать товары, которых нет в хранилище", и отобразятся все файлы в папке.Затем просто щелкните правой кнопкой мыши на файле, который вы хотите добавить, и выберите "Отметить для добавления ...".Вы можете убедиться, что он есть на вкладке "Ожидающие".Просто отправьте как обычно (Ctrl + S).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top