Принудительно сохранить локальную копию открытого файла

Я проверил несколько файлов на клиенте perforce. Я могу получить список этих файлов с помощью команды «p4 open». Он дает путь в виде //depot/... например, я хочу знать, как это можно преобразовать в путь по локальному пути (я имею в виду путь клиента) Так что я могу создать пакетный файл для резервного копирования незадолго до конца дня. Спасибо заранее, Удай.


person Uday    schedule 04.03.2009    source источник
comment
Вы можете проверить этот вопрос: stackoverflow.com/questions/300692/   -  person Jonathon Watney    schedule 04.03.2009


Ответы (9)


Вы можете использовать p4 where для преобразования спецификаций файлов хранилища в локальные файлы спец.

Чтобы проанализировать вывод p4 where из пакетного файла Windows, может помочь что-то вроде следующего:

for /f "tokens=3" %%i in ('p4 where %my_depot_filespec%') do echo %%i

Обратите внимание, что тело цикла for может выполняться более одного раза для более сложных отображений, таких как описанные в документации p4 where. Если вам нужно обработать их, вам может потребоваться более сложный синтаксический анализ.

person bk1e    schedule 04.03.2009
comment
Следует иметь в виду, что p4 where будет сообщать только о местоположении файла. Он не проверяет, существует ли он. - person Jonathon Watney; 04.03.2009
comment
@Jonathon: Хороший вопрос. И даже если он существует в хранилище, он может не синхронизироваться с клиентом. - person bk1e; 04.03.2009

Этот пакетный скрипт может заархивировать файлы в отдельный список изменений.

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
person avhacker    schedule 09.10.2009

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

Вы можете обнаружить, что использование ветки разработки и отправка изменений (с установленным флажком «повторно открыть для редактирования») в конце каждого дня на самом деле проще и лучше. Для начала вы используете Perforce для отслеживания ваших изменений, а не свою собственную ручную систему.

Использование ветки разработки означает, что вы можете выполнять эти проверки, не рискуя запутать своих коллег.

Просто предложение, которое стоит рассмотреть, вот и все.

person Greg Whitfield    schedule 05.03.2009
comment
По моему опыту, поддержание ваших собственных резервных копий между отправками локально вне perforce быстрее и менее рискованно, чем попытки поддерживать ветки. - person justinhj; 14.05.2009
comment
Это определенно правильный способ использования perforce — к сожалению, по моему опыту, большинство разработчиков кажутся слишком ленивыми (возможно, занятыми), чтобы научиться делать это правильно. - person cristobalito; 22.07.2010

p4 where filename

Это команда, которую вы ищете.

В нем будет указан путь к хранилищу, путь клиента и абсолютный путь к файлу в локальной файловой системе. Просто направьте вывод в cut, выберите абсолютный путь и скопируйте их.

person mustpax    schedule 04.03.2009
comment
В OP упоминается использование пакетного файла, который подразумевает Windows. команда вырезания может быть недоступна. - person Jonathon Watney; 04.03.2009

Этот пакетный сценарий может архивировать файлы в отдельные списки изменений.

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

person avhacker    schedule 09.10.2009

Проверьте свой клиент p4, поскольку там вы определили сопоставление //depot с путем вашей файловой системы. Замените //depot на это, чтобы получить локальный путь к файлу, чтобы вы могли сделать резервную копию.

Я не знаю, как вы можете получить это программно в пакетном файле.

person Bhushan Bhangale    schedule 04.03.2009

Следующий сценарий 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

person Community    schedule 11.05.2009

К вашему сведению, с версии 2012/2013 вам лучше использовать функцию откладывания Perforce для ежедневной операции резервного копирования. Другие пользователи в вашей команде также смогут получить доступ к этим полкам. Использование его для резервного копирования таким образом предотвращает загрязнение вашей истории вариантами промежуточных файлов, которые вам на самом деле не нужны (или части которых не подходят для регистрации).

person DavidM    schedule 30.06.2014

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

person Community    schedule 31.08.2009
comment
привет .. вы могли бы упомянуть об этом в комментарии к правильным ответам. :) - person Uday; 01.09.2009