4

(编辑:删除了我的问题,留下了一个让我感到困惑的问题的链接,因为这里的一些评论中有一些有用的东西)

这里的问题让我感到困惑,但实际上得到了充分的回答。该问题询问如何仅使用原始存储库的几个分支来构建新存储库。

4

2 回答 2

2

从您的帖子中,我不完全确定您在寻找什么。我正在尝试给出答案;让我知道这是否不是您需要的。

以下是将所有分支从源复制到目标存储库的简单脚本。请注意,如果分支目录名称包含任何空格,它将不起作用。您必须先设置目标存储库bzr init-repo

#!/bin/sh
SOURCEREPO=$1
TARGETREPO=$2
if [ ! -d "$TARGETREPO/.bzr" ]; then
  echo "$TARGETREPO is not a Bazaar repository; create one with bzr init-repo"
  exit 1
fi
BRANCHES=`cd "$SOURCEREPO"; find * -name .bzr -exec dirname '{}' ';'`
for branch in $BRANCHES; do
  mkdir -p "$TARGETREPO/$branch"
  if [ ! -d "$TARGETREPO/$branch/.bzr" ]; then
    echo "Cloning $branch"
    bzr branch --use-existing-dir "$SOURCEREPO/$branch" "$TARGETREPO/$branch" \
    && bzr config -d "$TARGETREPO/$branch" --remove parent_location
  else
    echo "Existing branch in $TARGETREPO/$branch"
  fi
done

基本上,它对bzr branch sourcerepo/branchdir targetrepo/branchdir所有分支执行 a ,然后用于bzr config摆脱每个分支副本的父位置设置(因为该位置可能很快就会消失)。

于 2013-11-05T13:03:28.443 回答
1

我不太确定你在这里真正想要什么。将远程分支添加到本地存储库和从另一个存储库重新创建存储库是完全不同的事情。链接的问题是关于第二个问题,答案很准确,所以我将解决您最初打算做的事情。

首先,当您说“主干存储库”时会感到困惑,因为“主干”通常意味着“主分支”,而分支和存储库是不同的概念,因此“主干存储库”并没有真正的意义。

在我看来,您有一个共享存储库:多个分支的容器目录。为了清楚起见:您使用命令创建一个共享存储库bzr init-repo,并使用bzr init(新的空分支)或使用bzr branch(另一个分支的副本,本地或非本地)在其中创建分支。

假设您有一个这样组织的共享存储库:

└── /tmp/shared/repo
    ├── bugfix123
    ├── feature1
    └── feature2

如果要添加队友的远程分支,可以使用:

bzr branch url_of_remote_branch /tmp/shared/repo/somename

例如,如果您的队友在 url 上有一个分支,lp:~jack/proj/bugfix312您可以使用以下命令将其放入本地存储库:

bzr branch lp:~jack/proj/bugfix312 /tmp/shared/repo/bugfix312

如果稍后您决定不想合并此分支,则可以使用以下命令将其删除:

bzr remove-branch /tmp/shared/repo/bugfix312
rm -fr /tmp/shared/repo/bugfix312

第一个命令只删除 Bazaar 的分支数据,它保持目录完整。第二个删除工作目录本身。

如果您正在寻找其他东西,请告诉我。

于 2013-11-04T20:09:38.520 回答