“bzr clone”、“bzr branch”和“bzr checkout”之间有什么区别吗?(涉及IT技术)

10

显然,当在非Bazaar目录中给定URL作为参数并执行时,bzr clonebzr branchbzr checkout都会执行相同的操作。

那么对于后续的Bazaar工作流程有什么区别吗?例如bzr commitbzr update等。


5
不要使用bzr clone命令。目前它是bzr branch的别名,但未来可能会更改其功能。 - bialix
3个回答

14

分支和克隆相同,但分支和检出是不同的

$ bzr help branch
...
别名:  get, clone
另请参阅: checkout

查看检出教程,您会发现检出基本上将您执行的每个操作直接绑定到分支。因此,您进行的任何操作都会在执行时push -- 显然这是巨大的工作流差异。

分支和检出的区别

首先要说的是,使用检出可以做的事情,在普通分支中也可以做到。检出只是启用了不同的默认值和工作流助手。

检出的作用

使用检出时,每当您在本地分支中创建新条目时,它也会在远程分支中创建相应的条目。这对应于bzr commitbzr pull等命令。如果您尝试提交新更改,并且远程分支与本地分支的状态不同,则会阻止您,并让您知道您已过期。您可以使用bzr update将远程更改应用于本地。


1
因此,checkout 将开关 bzr 切换到类似 svn 的模式,失去了分布式版本控制的所有优势。 - knittl
1
@knittl:并非全部,因为您仍然可以创建另一个分支进行检出。Bazaar的一个强大之处在于它提供了多种工作流程,检出工作流程可能会让从集中式版本控制系统转移的人感到放心。 - PhiLho
1
除了PhiLho提到的要点外,检出可以允许我们在不需要为每个功能分支拥有一个工作树的情况下使用多个功能分支。通过使用bzr switch而不是cd <branch-dir>来在分支之间切换,代码始终可以位于同一目录中。这对于使用IDE工具或提供本地版本的Web项目非常方便。 - Adam Glauser
@knittl 此外,您可以在离线状态下浏览历史记录、注释和制作差异。如果您想在没有连接的情况下提交,您可以解除绑定(这样它就立即变成了常规分支),然后进行提交。 - user334639

4
bzr branchbzr checkout有非常不同的功能。它们都提供了一个工作树,但是bzr checkout仅提供工作树;提交和更新直接在/从源代码库中进行。bzr branch提供了一个新分支的工作树;在此分支上的提交将不自动应用于源分支。我不确定clone的情况。 更新:根据评论,checkout提供完整的历史记录;这似乎是正确的。从语义上讲,checkout看起来和感觉像是本地具有集中式版本控制系统检出的分支;它通过保留本地历史记录(您可以离线浏览-加号),但将其链接回原始历史记录来实现这一点,因此只有当您处于最新状态并且提交自动推送时才能提交。此外,通过取消绑定检出,可以在没有连接的情况下提交,此时它变成了常规分支。

2
这是错误的。bzr checkout 本质上是 bzr branch + bzr bind。您可以获得完整的分支,例如在离线状态下浏览日志、差异和历史记录。轻量级检出是只提供树的内容。 - user334639

0

正如其他帖子所说,“bzr checkout”是“bzr clone/branch”的超集,因为“bzr checkout”创建了一个 绑定分支。绑定分支在执行更新操作时从源代码库中拉取,并在执行提交操作时将更改推送到源代码库。

要绑定已克隆的分支或取消绑定已检出的分支,请使用“bzr bind” / “bzr unbind”。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接