bzr init-repo
создает так называемый общий репозиторий . В общем хранилище все ревизии хранятся в каталоге .bzr
репозитория, а в каталогах .bzr
самих ветвей хранится только метаинформация ветвей, а не сами ревизии. Таким образом, каталоги веток становятся очень легкими, и общие версии ветвей не дублируются.
Допустим, мы создали общий репозиторий и ветви внутри него, например:
bzr init-repo the-project # create shared repo
bzr init the-project/trunk # create a branch inside shared repo
cd the-project/trunk # cd to branch dir
cp -r /path/to/files/* . # copy the project's files into the branch
bzr add # tell bazaar to add everything to version control
bzr commit -m 'added files' # commit the changes (add files)
bzr branch . ../branch1 # create another branch from the current one
bzr branch . ../branch2 # create another branch from the current one
Тогда каталоги макета будут функционировать так:
the-project/.bzr -- only revisions are stored here, no branch info
the-project/trunk/.bzr -- only branch info is stored here, no revisions
the-project/branch1/.bzr -- only branch info is stored here, no revisions
the-project/branch2/.bzr -- only branch info is stored here, no revisions
Если бы вы не использовали общий репозиторий, ситуация была бы совсем другой, например:
bzr init trunk # create a repo
cd trunk # cd to repo dir
cp -r /path/to/files/* . # copy the project's files into the repo
bzr add # tell bazaar to add everything to version control
bzr commit -m 'added files' # commit the changes (add files)
bzr branch . ../branch1 # create another repo from the current one
bzr branch . ../branch2 # create another repo from the current one
В этом случае (без общего репо) каталоги макета будут работать следующим образом:
trunk/.bzr -- revisions + branch info are stored here
branch1/.bzr -- revisions + branch info are stored here
branch2/.bzr -- revisions + branch info are stored here
В этом случае редакции будут продублированы во всех трех ветвях.
bzr pull
полезно, если текущая ветвь имеет некоторые ревизии позади другой ветки, так что недостающие ревизии могут быть добавлены простым способом. Если в текущей ветке есть какие-то ревизии, а в другой нет, тогда тянуть не удастся, как в вашем примере. Это совершенно нормально, и решением в такой ситуации является обычное слияние с bzr merge
.
bzr merge
терпит неудачу в вашем примере, потому что две ветви (транк и другая ветвь) не имеют общих ревизий. Это потому, что в то время, когда вы разветвлялись из ствола, он был совершенно пуст, и в него не было внесено никаких изменений. Две ветви полностью независимы, не имеют абсолютно общих версий.
Все еще возможно объединить несвязанные ветви, как объяснил @bialix в комментарии к bzr merge ../../trunk -r0..-1
, но я не думаю, что это было вашим намерением. Бессмысленно ветвиться от ствола, у которого нет ревизий, в реалистичном случае вы будете ветвиться от ветки, у которой есть хотя бы 1 ревизия, и в этом случае вы не получите такой ошибки, и объединение будет работать как ожидалось.