创建分支别名? [复制]

Posted

技术标签:

【中文标题】创建分支别名? [复制]【英文标题】:Create a branch alias? [duplicate] 【发布时间】:2012-12-31 05:12:12 【问题描述】:

我正在研究从 starteam 切换到 Git。

目前,在starteam 中,我们使用具有特殊名称的“浮动视图”。这些浮动视图基本上像别名一样工作。因此,我们可以指定一个特定的别名来检出,我们将获得我们当前正在模型测试的分支。

这将如何在 Git 中完成? 这基本上是我们的分支机构的组织方式:

这些都是分支

master (stable view)
   |  - Branch 2012.05.01
   |          | - Project 1
   |          | - Project 2
   |          | - model [floating view / alias to Branch 2012.05.01]
   |
   |  - Branch 2012.07.11   (these would also have various child views for projects)
   |  - Branch 2012.10.17

(模型测试完成后,Branch 2012.05.01 将合并到 master。)

在我们的自动化脚本 (ant) 中,为了运行我们的模型部署,我们只需从名为 model 的分支中签出。这样一来,我们就不必在更改我们正在模型测试的分支时更改脚本,并且找出我们正在模型测试的视图就像找出 model 分支引用的哪个分支一样简单。

有没有这样的方法可以在 Git 中做类似的事情?

澄清一下:

    我想要一个分支的别名。一个分支,而不是一个提交。 Branch 2012.05.01 表示计划在 2012.05.01 发货的分支,并不表示 2012.05.01 的某个时刻。 我想要Branch 2012.05.01 的别名。 Branch 2012.05.01 是一个集成分支,它不断被修改。但我不想将其引用为Branch 2012.05.01,我想将其引用为model。这样,我可以将别名更改为 Branch 2012.07.11,它会从该分支获取最新的代码,而无需更改任何结帐代码脚本。

【问题讨论】:

如果它是一个集成分支,那么我提供链接的工作流程应该适合您。添加发布候选分支也会有所帮助。您将在那里跟踪已完成的任务或功能。您可以使用它来部署到测试或临时环境。 据我所知 git 没有这样的东西,但你可以做的只是让你的“最年轻的”分支实际上命名为“model”,然后将它分支出来用于发布 @AdamDymitruk,该链接确实有帮助。这基本上正是我们在 starteam 中所做的事情,但它没有回答我关于如何为分支创建别名的问题。 如here 所述,您可以通过符号引用创建别名。 谢谢@g_daniel。我不确定解决此问题的正确方法是什么,但我已投票结束此问题。 【参考方案1】:

请看这里:https://***.com/a/549949/606723

您可以按照 Greg 的建议重命名主分支主干,或者您 还可以创建一个主干作为对主控的符号引用 分支,以便 git 和 svn 用户都拥有他们的“主”分支 习惯了。

git symbolic-ref refs/heads/trunk refs/heads/master

请注意,trunk 不是一等公民。如果您结帐后备箱并且 执行一个 git status 你实际上将在 master 上,但是你可以 在所有使用分支名称的地方使用trunk命令(日志, 合并等)。

【讨论】:

对于像我一样苦苦挣扎的人来说,请注意——要非常小心“refs”和“heads”中的单数和复数。如果你错过了任何一个,你会得到完全不同的东西。 还要非常小心参数的顺序。它与ln -s 不一样,如果你把它们放错了地方,git 会很高兴地(并且默默地)用对不存在的东西的符号引用来破坏真实分支的 HEAD 引用(此时你会更好地希望恢复该分支的正确提交哈希很容易)。 另外,不要尝试使用git branch -d 删除符号引用。即使对于该操作,它也会被取消引用,因此您实际上会删除源分支,将引用留在后面(如果您当前已签出该分支,它甚至会让您这样做)。看起来删除符号引用的唯一“接口”是删除文件。 phils 写道:“(此时您最好希望恢复该分支的正确提交哈希很容易)”恢复提交哈希总是很容易:git reflog跨度> @phils “看起来删除符号引用的唯一‘接口’就是删除文件。” git symbolic-ref -d refs/heads/trunk 也可以正常工作【参考方案2】:

Git 不支持分支的别名。

这意味着您将不得不依赖脚本中的变量来生成 model="branch.2012.10.17" 或类似的东西。你的脚本会做这样的事情:

git checkout $model

我将把这个答案的其余部分留在这里,因为我们在这个讨论中来自哪里:

可以在这里找到关于分支策略的非常复杂的讨论:http://dymitruk.com/blog/2012/02/05/branch-per-feature/

具体看一下集成分支和候选发布分支的作用。这可能就是您正在寻找的。​​p>

将 git 视为拍摄工作目录快照的东西,而不是文件夹的历史记录。

progit.org/book 解释了存储历史的有向无环图。所有引用都只是指向其中节点的东西。这应该阐明您希望如何构建您的工作流程。

制作一个开始标签 - version2.1。从那里制作您的 int-version2.1 (为简洁起见,使用 nummers 而不是日期)。您开始的任何工作,都从版本 2.1 标记开始。将工作合并到 int-version2.1 中。其他人也会这样做。

【讨论】:

Git 不支持引用的引用。所有引用都解析为一次提交。 我想我必须找到一个创造性的解决方案。谢谢。 :)【参考方案3】:

如果您需要每个功能的分支 - Adam Dymitruk 的答案是正确的, 但如果您需要保存链接分支 - 特定状态(基于时间),无需更改它们,您可以使用 git 标签。

我使用标签来表示每个产品版本的商店状态。

【讨论】:

我根本不需要保存特定的状态。我只想通过将分支 2012.05.01 引用为“模型”而不是“分支 2012.05.01”来从分支 2012.05.01 结帐,所以我的脚本不需要更改。 git checkout 适用于分支和标签。

以上是关于创建分支别名? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

git,远程库操作,git命令行命令

如何从旧提交创建新的 Git 分支? [复制]

如何在 bash 别名中包含参数? [复制]

创建分支时如何获取提交[重复]

如何将分支的内容复制到新的本地分支?

git 创建分支会把复制所有代码吗