che*_*art 16 mercurial dvcs bitbucket
如果我从一个本地的mercurial repo开始,我认为它是"主要"回购(请原谅我的dvcs领主),并打算使用bitbucket作为备份和问题跟踪工具,我可以在我当地进行所有更改回购并执行"hg push"将更改发送回bitbucket.
我不需要在我的本地机器上运行"hg push"命令并使用"hg update"吗?
Ste*_*osh 38
你为什么关心BitBucket服务器上工作目录中的内容?只要您推送更改将在存储库中并在BitBucket页面上可见.
编辑:好的,我要编辑这个是一个有用的答案.
假设您在BitBucket上克隆了我的一个存储库,例如django-hoptoad.您将django-hoptoad在本地计算机上找到一个文件夹,其内容将如下所示:
django-hoptoad/
|
+-- .hg/
|
+-- ... my code and other folders
Run Code Online (Sandbox Code Playgroud)
有关存储库本身的所有数据都存储在该.hg/文件夹中.这就是Mercurial保存关于哪些文件在哪些更改集中更改的数据以及许多其他内容.
你可以这样想(虽然它过于简单化了):
django-hoptoad/
|
+-- .hg/
| |
| +-- data about changeset 1
| +-- data about changeset 2
|
+-- ... my code and other folders as they appear in changeset 2
Run Code Online (Sandbox Code Playgroud)
当您运行hg pull并且不更新时,您将任何新的更改集拉入存储库:
django-hoptoad/
|
+-- .hg/
| |
| +-- data about changeset 1
| +-- data about changeset 2
| +-- data about changeset 3 (NEW)
| +-- data about changeset 4 (NEW)
|
+-- ... my code and other folders as they appear in changeset 2
Run Code Online (Sandbox Code Playgroud)
如果不更新,... my code and other folders则仍将等同于其中的任何内容changeset 2,但其他更改集仍在存储库中.
当您运行hg updateMercurial时,将更新... my code and other folders到最新变更集的内容.
django-hoptoad/
|
+-- .hg/
| |
| +-- data about changeset 1
| +-- data about changeset 2
| +-- data about changeset 3
| +-- data about changeset 4
|
+-- ... my code and other folders as they appear in changeset 4
Run Code Online (Sandbox Code Playgroud)
实际上,这意味着发生的事情... my code and other folders不必与存储库中的内容相匹配.你可以删除它,所有的变更集仍然在存储库中:
django-hoptoad/
|
+-- .hg/
|
+-- data about changeset 1
+-- data about changeset 2
+-- data about changeset 3
+-- data about changeset 4
Run Code Online (Sandbox Code Playgroud)
如果您现在提交,它将创建一个新的变更集,基本上说"没有文件".你不必提交.人们仍然可以推送你,因为存储库仍然包含有关变更集的所有数据.
这几乎可以肯定BitBucket正在做的事情.你永远不会登录BitBucket的服务器,编辑代码并在那里提交 - 你只需要推/拉/克隆.这意味着... my code and other folders永远不会真正使用它,所以我认为Jesper已将其设置为删除它以节省磁盘空间.
由于hg update只影响工作目录,并且从未使用BitBucket上的工作目录,因此在hg update推送到BitBucket之后不需要运行.
Dav*_*ebb 12
我想你可能会在工作副本(aka工作目录)和本地存储库之间感到困惑.这些是相关的但是分开的东西.本地存储库包含所有跟踪文件的完整历史记录,而工作副本包含特定修订版本的文件版本以及对它们的更改,
该hg命令push和pull移动存储库之间的变化update和commit你的工作副本和本地资源库之间移动的变化.
因此,如果您push更改为不会更改本地存储库的远程存储库,那么就不需要update在本地存储库上运行.但是,使用远程存储库的任何人都需要执行此操作,update以便您的更改显示在其工作副本中.相反,如果您pull从远程存储库进行更改,则需要执行此操作,update以便在工作副本中显示这些更改.
同样,您需要将commit工作副本中的所有更改发送到本地存储库,然后才能使用它们将其发送到另一个存储库push.
Bitbucket向您展示了存储库.正如Dave Webb所指出的,hg update关注更新工作副本.当您这样做时,hg push您正在传输变更集以更新Bitbucket上的存储库 - 因此Web界面将显示此信息.
正如Steve Losh所指出的那样,Bitbucket没有工作副本.hg update背后也没有做到.
您可以通过制作没有工作副本的克隆来自己试验:
% hg clone --noupdate repo repo-empty
Run Code Online (Sandbox Code Playgroud)
然后进去repo-empty做hg log.您将看到,即使那里没有文件,仍然克隆了历史记录(即存储库).您可以使用以下hg update命令显示文件:
% hg update
Run Code Online (Sandbox Code Playgroud)
并再次消失
% hg update null
Run Code Online (Sandbox Code Playgroud)
只有在您想要查看文件并进行新的提交时才需要工作副本.否则,您可以将其删除以节省空间.这通常在克隆中完成,这些克隆仅用于服务hg serve或与Bitbucket使用的相同的东西.
| 归档时间: |
|
| 查看次数: |
20301 次 |
| 最近记录: |