Как создать частную ветку удаленного исполнения и нажать на нее? - PullRequest
1 голос
/ 10 октября 2019

Знаком с git, впервые использую Perforce.

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

Мне нужно что-то вроде удаленных веток git, где:

  1. Я могу зафиксировать свои изменения. Что-то вроде git commit

  2. Я могу нажать на удаленную частную ветку, которая не сливается. Что-то вроде git push remote my-branch

  3. Может объединить изменения из основной линии в мою ветку. Что-то вроде git merge master.

Я пытаюсь понять ветви p4, но путаюсь с терминологией между p4 integrate и p4 branch. Более того, все шаги ведут к p4 submit, который подчиняется основной линии вместо моей ветви. Есть ли способ отправки в удаленную частную ветку?

Я попытался выполнить шаги ветки p4 здесь: https://www.perforce.com/perforce/doc.973/cmdguide/html/branchin.htm Но это не привело к отправке в частную удаленную ветку.

1 Ответ

3 голосов
/ 11 октября 2019

Perforce имеет режим DVCS, который немного напоминает git, но если нет веских причин не делать этого (например, ограниченное подключение или жесткие ограничения ресурсов на сервере), типичным способом использования Perforce является выполнение всего непосредственно на центральном сервере. («Удаленный репозиторий»). p4 submit в типичной модели - это, по сути, git commit + git push, потому что ваш «коммит» идет непосредственно на удаленный сервер.

Так что, когда вы создаете ветку, вы делаете это на серверетакже. Ветви в Perforce - это просто папки, которые копируются из других папок (с большой семантикой отслеживания слияний, построенной поверх этой простой операции копирования), поэтому для создания новой ветви функций из //depot/main вы можете запустить что-то вроде:

p4 integ //depot/main/... //depot/features/road-rev/...
p4 submit

Это создает новую ветку в депо (в виде папки с именем features/road-rev), а также синхронизирует ее с вашим рабочим пространством, поэтому теперь все, что вам нужно сделать, это:

cd features/road-rev
p4 add <new files>
p4 edit <existing files>
<etc>
p4 submit

Изменениявы делаете в ветке road-rev совершенно отдельно от ветки main. Чтобы получить более новые изменения из main, вы просто повторяете ту же команду integ, которую вы использовали для ее создания, но добавляете resolve для обработки файлов, требующих слияния:

p4 integ //depot/main/... //depot/features/road-rev/...
p4 resolve -as
p4 resolve
p4 submit

Если вы запуститеинтегрируйте команду в обратном направлении (т.е. меняйте порядок аргументов), затем изменения объединяются в другом направлении. Как только вы поймете, что можете использовать integrate для произвольной передачи изменений из одного набора файлов в другой, ветвление становится очень простым вопросом определения различных наборов файлов (обычно в качестве папок верхнего уровня) для представления различных разветвленных вариантовкод - это называется «межфайловое ветвление».

Если ваш администратор настроил ваше хранилище для использования потоков , рабочий процесс немного отличается (потоки - это "управляемые ветви", которыепредназначены для того, чтобы чувствовать себя немного более похожими на ветки git, к которым вы привыкли - вы можете иметь только один поток в своей рабочей области за раз, и вы используете команду switch для переключения между ними, вместо определения представление клиента , которое отображает произвольные ветви / файлы в произвольные части вашего рабочего пространства). Вы по-прежнему имеете одно и то же базовое представление различных разветвленных вариантов, представляющих собой разные папки в хранилище, но сверху есть целый набор синтаксических символов, которые как бы скрывают это представление. Чтобы создать ветвь объекта из потока, вы должны сделать:

p4 switch -c road-rev

, что аналогично git checkout -b road-rev.

...