Я проверил несколько файлов на клиенте perforce. Я могу получить список этих файлов с помощью команды «p4 open». Он дает путь в виде //depot/... например, я хочу знать, как это можно преобразовать в путь по локальному пути (я имею в виду путь клиента) Так что я могу создать пакетный файл для резервного копирования незадолго до конца дня. Спасибо заранее, Удай.
Принудительно сохранить локальную копию открытого файла
Ответы (9)
Вы можете использовать p4 where
для преобразования спецификаций файлов хранилища в локальные файлы спец.
Чтобы проанализировать вывод p4 where
из пакетного файла Windows, может помочь что-то вроде следующего:
for /f "tokens=3" %%i in ('p4 where %my_depot_filespec%') do echo %%i
Обратите внимание, что тело цикла for может выполняться более одного раза для более сложных отображений, таких как описанные в документации p4 where
. Если вам нужно обработать их, вам может потребоваться более сложный синтаксический анализ.
Этот пакетный скрипт может заархивировать файлы в отдельный список изменений.
for /F "tokens=1,5,6 delims=# " %%a IN ('p4 opened') do for /F "tokens=3" %%j IN ('p4 where %%a') do zip %%b%%c %%j
Он создаст такие файлы:
change571620.zip
change673450.zip
change723098.zip
defaultchange.zip
Вы также можете подумать, почему вам необходимо создавать резервные копии файлов в конце каждого дня, а не использовать сам Perforce.
Вы можете обнаружить, что использование ветки разработки и отправка изменений (с установленным флажком «повторно открыть для редактирования») в конце каждого дня на самом деле проще и лучше. Для начала вы используете Perforce для отслеживания ваших изменений, а не свою собственную ручную систему.
Использование ветки разработки означает, что вы можете выполнять эти проверки, не рискуя запутать своих коллег.
Просто предложение, которое стоит рассмотреть, вот и все.
p4 where filename
Это команда, которую вы ищете.
В нем будет указан путь к хранилищу, путь клиента и абсолютный путь к файлу в локальной файловой системе. Просто направьте вывод в cut
, выберите абсолютный путь и скопируйте их.
Этот пакетный сценарий может архивировать файлы в отдельные списки изменений.
for /F "tokens=1,5,6 delims=#" %%a IN ('p4 open') do for /F "tokens=3" " %%j IN ('p4, где %%a') do zip %%b%%c %%j
Будут созданы такие файлы:
change571620.zip
change673450.zip
change723098.zip
defaultchange.zip
Проверьте свой клиент p4, поскольку там вы определили сопоставление //depot с путем вашей файловой системы. Замените //depot на это, чтобы получить локальный путь к файлу, чтобы вы могли сделать резервную копию.
Я не знаю, как вы можете получить это программно в пакетном файле.
Следующий сценарий BAT копирует принудительно открытые файлы из списка ожидающих изменений
(аргумент командной строки %1)
p4 open -c %1 > open-%1.txt
for /F "tokens= 1 delims=#" %%i IN (open-%1.txt) do call :add-to-zip %%i
:add-to-zip
for /F "tokens=3 " %%j IN ('p4, где %1') do zip [zip-имя-файла] %%j
К вашему сведению, с версии 2012/2013 вам лучше использовать функцию откладывания Perforce для ежедневной операции резервного копирования. Другие пользователи в вашей команде также смогут получить доступ к этим полкам. Использование его для резервного копирования таким образом предотвращает загрязнение вашей истории вариантами промежуточных файлов, которые вам на самом деле не нужны (или части которых не подходят для регистрации).
Большое спасибо :-) Просто искал команду, которая может дать мне клиентский путь к открытым файлам точно по той же причине для резервного копирования файлов. Я получил не только команду, но и сценарий :-)