git - 分支别名?

use*_*723 35 git version-control feature-branch branching-and-merging

我正在研究从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
Run Code Online (Sandbox Code Playgroud)

(模型测试完成后,分支2012.05.01将合并为主)

在我们的自动脚本(ant)中运行我们的模型部署,我们只需从我们的分支机构中检出"模型".这样我们就不必改变我们的脚本,因为我们改变了我们模型测试的哪个分支,并找出我们进行模型测试的哪个视图就像确定"模型"分支引用哪个分支一样简单.

有什么方法可以在git中做类似的事情吗?

编辑:人们在这里感到困惑.

  1. 我想要一个分支的别名.分支,而不是提交.
  2. "2012.05.01分支"是指拟于2012.05.01发货的分支机构,并不代表2012.05.01时刻
  3. 我想要分支2012.05.01的别名.Branch 2012.05.01是一个集成分支,它经常被修改.但是我不想把它作为Branch 2012.05.01引用,我想把它称为"模型".这样,我可以将别名更改为"Branch 2012.07.11",它将从该分支获取最新代码,而无需更改任何结帐代码脚本.

use*_*723 42

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

您可以像Greg建议的那样重命名主分支中继,或者您也可以创建一个主干,它是对主分支的符号引用,以便git和svn用户都具有他们习惯的"主"分支.

git symbolic-ref refs/heads/trunk refs/heads/master
Run Code Online (Sandbox Code Playgroud)

请注意,行李箱不是一等公民.如果您签出中继并执行git状态,您实际上将在master上,但是您可以在使用分支名称(日志,合并等)的所有位置使用trunk命令.

  • 另外,不要尝试使用`git branch -d`删除symbolic-ref.即使对于该操作,它也被取消引用,因此您实际上将删除源分支,留下引用(如果您当前已检出该分支,它甚至会让您执行此操作).看起来删除符号引用的唯一"接口"是删除文件. (5认同)
  • 对于任何像我一样苦苦挣扎的人来说,只是一个注意事项 - 对'refs'和'head'中的单数和复数非常小心.如果你错过了任何一个,你会得到完全不同的东西. (3认同)
  • 还要非常小心参数的顺序.它与`ln -s`不一样,如果你把它们放错了方向,git会很乐意(并且默默地)用真实分支的HEAD引用来对不存在的东西进行符号引用(此时你我希望能够轻松恢复该分支的正确提交哈希值. (3认同)
  • phils 写道:“(此时你最好希望能够轻松恢复该分支的正确提交哈希)” 恢复提交哈希总是很容易:`git reflog` (3认同)
  • @phils“看起来删除符号引用的唯一'接口'是删除文件。” `git Symbolic-ref -d refs/heads/trunk` 也可以正常工作 (3认同)
  • 您可能还会发现 /sf/answers/1647292111/ 很有用。它提供了一个“gitbranch-alias”命令,该命令使用相同的“symbolic-ref”技术,但提供了执行此操作所需的所有安全包装器,而不必担心在过程中意外地破坏东西,或者以其他方式最终处于奇怪的状态。 (2认同)

Ada*_*ruk 6

Git 不支持分支别名。

这意味着您必须依赖脚本中的变量来制作 model="branch.2012.10.17" 或类似的内容。你的脚本会做这样的事情:

git checkout $model
Run Code Online (Sandbox Code Playgroud)

我将这个答案的其余部分留在这里,以了解我们在本次讨论中的出发点:

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

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

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

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

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

  • Git 不支持引用的引用。所有引用都解析为提交。 (3认同)