3

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

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

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

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

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

实际上,我通常会有 3 个带有分支名称的文件夹,我可以从发布分支获取最新的并在发布分支上进行更改,而不用担心主/默认分支被覆盖,因为两个分支都在不同的目录中。完成后,我可以在发布分支中提交更改并在主/默认分支中恢复工作。

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

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

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

4

2 回答 2

2

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

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

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

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

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

于 2015-12-06T05:11:05.557 回答
1

与 Perforce (Subversion) Git/Mercurial 相反

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

这些根本差异极大地改变了具有“神圣”更改历史的前 CVCS 用户的通常工作流程,允许在任何无关紧要的情况下提交任何质量的 WIP(请阅读您的用例的“VCS-agnostic way”部分)

是的,Git-worktree 是新的Git(在另一边)和 Mercurial的可行解决方案(除了注明“提交 WIP + 切换分支”):git stash

于 2015-12-06T08:36:18.680 回答