Если вы уже знакомы с системой межфайлового ветвления Perforce (т.е. каждая «ветвь» в Perforce - это отдельный набор файлов в хранилище), то легко понять поток как ветвь, которая автоматически управляется для ты. Поток определяет, в каком каталоге депо находится ветка, как выглядит рабочая область для этой ветки и как изменения распространяются на другие ветки. (В неуправляемой ветке «classi c» эти концепции существуют для каждой ветки, но не формализованы; потоки обеспечивают уровень синтаксиса c сахара и обеспечения выполнения всех этих операций.)
Если вы совсем не знакомы с Perforce и пришли из git
, да, самое простое мысленное отображение - «stream = branch». Используйте p4 switch -c NEWBRANCH
вместо git checkout -b NEWBRANCH
и p4 switch BRANCH
вместо git checkout BRANCH
.
Вот демонстрация (начиная с нуля с p4 init
) создания нового потока и внесения в него изменений , а затем объединение этого изменения с основной линией:
C:\Perforce\test4>p4 init -C1 -n
Server bob-dvcs-1592407491 saved.
C:\Perforce\test4>p4 switch -l
main *
C:\Perforce\test4>echo "here's a test file" > foo
C:\Perforce\test4>p4 add foo
//stream/main/foo#1 - opened for add
C:\Perforce\test4>p4 submit -d "my first file!"
Submitting change 1.
Locking 1 files ...
add //stream/main/foo#1
Change 1 submitted.
C:\Perforce\test4>p4 switch -c dev
dev
C:\Perforce\test4>p4 switch -l
dev *
main
C:\Perforce\test4>p4 edit foo
//stream/dev/foo#1 - opened for edit
C:\Perforce\test4>echo "a change" >> foo
C:\Perforce\test4>p4 submit -d "my first edit!"
Submitting change 3.
Locking 1 files ...
edit //stream/dev/foo#2
Change 3 submitted.
C:\Perforce\test4>p4 filelog foo
//stream/dev/foo
... #2 change 3 edit on 2020/06/17 by bob@bob-dvcs-1592407491 (text) 'my first edit!'
... ... copy into //stream/main/foo#2
... #1 change 2 branch on 2020/06/17 by bob@bob-dvcs-1592407491 (text) 'Populate //stream/dev.'
... ... branch from //stream/main/foo#1
C:\Perforce\test4>p4 switch main
C:\Perforce\test4>cat foo
"here's a test file"
C:\Perforce\test4>p4 merge --from dev
//stream/main/foo#1 - integrate from //stream/dev/foo#2
... must resolve content from //stream/dev/foo#2
C:\Perforce\test4>p4 resolve -am
c:\Perforce\test4\foo - merging //stream/dev/foo#2
Diff chunks: 0 yours + 1 theirs + 0 both + 0 conflicting
//bob-dvcs-1592407491/foo - copy from //stream/dev/foo
C:\Perforce\test4>p4 submit -d "my first merge!"
Submitting change 4.
Locking 1 files ...
integrate //stream/main/foo#2
Change 4 submitted.
C:\Perforce\test4>cat foo
"here's a test file"
"a change"
C:\Perforce\test4>p4 filelog foo
//stream/main/foo
... #2 change 4 integrate on 2020/06/17 by bob@bob-dvcs-1592407491 (text) 'my first merge!'
... ... copy from //stream/dev/foo#2
... #1 change 1 add on 2020/06/17 by bob@bob-dvcs-1592407491 (text) 'my first file!'
... ... branch into //stream/dev/foo#1