Что такое принудительный поток? - PullRequest
0 голосов
/ 17 июня 2020

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

Я использовал git ранее, но пока не понимаю концепции потоков. Это то же самое, что и ветвление в git? Итак, как бы вы объяснили потоки пользователю Git?

1 Ответ

1 голос
/ 17 июня 2020

Если вы уже знакомы с системой межфайлового ветвления 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
...