我是git&的新手善变并尝试使用这些工具。我在工作中使用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个文件夹,其中包含分支的名称,我可以从发布分支获取最新内容,并在发布分支上进行更改,而无需担心< em> master / default 分支被覆盖,因为两个分支都在不同的目录中。完成后,我可以在发布分支中提交更改并继续在 master / default 分支中工作。
我可以在git / mercurial中做些什么吗?
我能想到的最接近的选项是再次克隆存储库(可能是从本地存储而不是远程存储以节省网络开销),然后在发布分支上工作并将更改推送回本地和远程存储库。
我认为这可能会浪费本地空间,因为存储库必须为此目的再次克隆所有历史记录和元数据。
答案 0 :(得分:2)
Git有https://git-scm.com/docs/git-worktree,允许您为回购创建多个本地工作树。
我使用从遥控器两次克隆repo的方法,在本地保留两个或更多副本。这对我来说非常好。我在商业软件环境中工作,我们总是有支持的后续版本,当前版本的发布版本,提前工作的分支机构等。在任何时候,至少有三个活跃的团队共享分支,并且之间有很多共享特色分支机构的成对或三分之一。
在某些情况下有帮助的另一个工具是git stash
。这对我来说是一个常规的转到,因为我必须在本地修改工具,但是永远不能提交。但它对于中断任务和切换分支也很有用。
本地存储,是的,数量上它是浪费,但是,我不在乎。我关心的是拉动和推动的传输时间,以及摆弄源代码控制的时间。
这里的其他人可以提供更多关于Git的知识。我对mercurial一无所知。
答案 1 :(得分:1)
与Perforce(Subversion)Git / Mercurial相反
这些基本差异极大地改变了具有“神圣”变化历史的前CVCS用户的通常工作流程,允许commit WIP of any quality on any insignificant occasion(对于您的用例,请阅读“与VCS无关的方式”部分)
是的,Git-worktree是一个workable solution for fresh Git(另一边是git stash
),对于Mercurial,你有(除了注明“提交WIP + switch分支”):