Объединение Perforce файловых операций «добавить» и «редактировать»

Чтобы автоматизировать постановку Perforce, я сталкиваюсь с дилеммой, что add и edit — это две разные операции, и они работают с файлами с разным статусом SCM, то есть «уже в SCM или нет».

Это отличается от git, где постановка выполняется равномерно add.

Я хотел бы иметь что-то вроде псевдокода:

filepath = '/path/to/myfile.ext'
if p4.is_under_scm(filepath):
    p4.edit(filepath)
else:
    p4.add(filepath)

или еще лучше, просто скройте детали с помощью:

p4.staging(filepath)

Как мне добиться этого, вызвав p4 программу командной строки?. Сейчас я не использую никаких привязок к языку программирования.


1
104
1

Ответ:

Решено

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

Имейте в виду, что если вы пойдете по этому пути, reconcile работает только с файлами нераспечатанный, которые являются разные из версии хранилища, поэтому он предназначен для использования после с локальными изменениями (это отличается от стандартного рабочего процесса, когда вы открываете файл с помощью p4 edit до его редактирование — идея в том, что вы используете reconcile, чтобы исправлять вещи постфактум, если вам приходилось работать в автономном режиме или что-то в этом роде). Кроме того, если вы передумали о том, что вы делаете с файлом (например, вы удалили локальную копию после того, как она была открыта для edit, но до того, как вы submit), вам может потребоваться revert -k ее и повторно reconcile, чтобы убедиться, что она открыть для правильного действия.

Для чего-то, что соответствует псевдокоду в вашем вопросе, вам, вероятно, нужна команда p4 have, которая сообщает вам, соответствует ли локальный файл ревизии хранилища (и если да, то какой). p4 edit работает только с файлом, который вы have, тогда как p4 add будет работать с файлом в вашей рабочей области, который не соответствует существующему файлу хранилища. (Здесь есть очень тонкий момент — файл может быть сопоставить с файлом хранилища, несмотря на то, что он не был синхронизирован с хранилищем! В этом случае вы столкнетесь с конфликтом, когда отправите свой add.)


Интересные вопросы для изучения