【问题标题】:Mercurial/Git: Different directories for different branches in same repositoryMercurial/Git:同一存储库中不同分支的不同目录
【发布时间】:2015-12-06 05:05:37
【问题描述】:

我是 git 和 mercurial 的新手,并且正在尝试使用这些工具。我在工作中使用 perforce 作为源代码控制,因此最终将其功能与它进行比较。

现在,我有一个如下所示的存储库:

Repo_1:
   DummyProject:
   Master/Default - branch
   Release        - branch
   AnotherBranch  - branch

对于 Git/Mercurial,我使用 Atlassian 的 SourceTree GUI 客户端进行操作。我已经在本地克隆了这个完整的存储库,并且可以在 GUI 客户端中看到分支。要在分支之间切换,我可以使用此工具结帐。

假设我在 Master/Default 分支中工作,并对某些文件进行了一些更改。虽然我仍在处理这个分支,但出现了一些关键问题,我需要在 Release 分支中进行更改。此时,如果我从Master/Default 分支切换到release 分支,SourceTree 基本上会用release 分支的内容更新工作目录. 它警告我有一些未保存的更改,我应该在切换到 release 分支之前提交或搁置/存储这些更改。

在 perforce 中,我通常会有 3 个带有分支名称的文件夹,我可以从 release 分支获取最新的并在 release 分支上进行更改,而不必担心 master/default 分支被覆盖,因为两个分支位于不同的目录中。完成后,我可以在 release 分支中提交更改并在 master/default 分支中继续工作。

我可以在 git/mercurial 中做些什么吗?

我能想到的最接近的选择是再次克隆存储库(可能从本地而不是远程克隆以节省网络开销),然后在发布分支上工作并将更改推送回本地和远程存储库.

我认为这可能会浪费本地空间,因为存储库必须为此再次克隆所有历史记录和元数据。

【问题讨论】:

    标签: git mercurial perforce sourcetree


    【解决方案1】:

    Git 有 https://git-scm.com/docs/git-worktree,它允许您为一个 repo 创建多个本地工作树。

    我使用从远程克隆 repo 两次的方法,在本地保留两个或多个副本。这对我来说效果非常好。我在一个商业软件环境中工作,我们总是有支持的版本、当前版本的发布、提前工作的分支等。任何时候至少有三个活跃的团队共享分支,并且在成对或成对之间进行大量共享功能分支上的开发人员。

    在某些情况下可以提供帮助的另一个工具是git stash。这对我来说是一个常规的 goto,对于由于工具而我必须在本地进行的修改,但永远无法提交。但它对于中断任务和切换分支也很有用。

    本地存储,是的,从数量上看这是一种浪费,但是,我不在乎。我关心的是拉取和推送的传输时间,以及花在摆弄源代码控制上的时间。

    这里的其他人可以提供更多关于 Git 的知识。我对 mercurial 的认识为零。

    【讨论】:

      【解决方案2】:

      与 Perforce (Subversion) Git/Mercurial 相反

      • 将分支作为逻辑对象,而不是物理对象(您只能将 URL 用于存储库,而不是用于存储库内的目录|| 分支)
      • 拥有(简单的)可变历史

      这些根本差异极大地改变了具有“神圣”更改历史的前 CVCS 用户的通常工作流程,允许 commit WIP of any quality on any insignificant occasion(请阅读“VCS 不可知方式”部分以供您的用例使用)

      是的,Git-worktree 是一个 workable solution for fresh Git(另一边是 git stash),而对于 Mercurial,你有(除了注明“提交 WIP + 切换分支”):

      【讨论】:

      • @aflp91 - 是的,在 another answer 的链接主题中提到了它...我很容易忘记未使用的替代品
      猜你喜欢
      • 2021-10-23
      • 1970-01-01
      • 2011-07-08
      • 2017-01-25
      • 1970-01-01
      • 2012-04-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多