如何实现Pivotal Tracker&;Github集成?

如何实现Pivotal Tracker&;Github集成?,git,github,githooks,pivotaltracker,Git,Github,Githooks,Pivotaltracker,Pivotal Tracker和Github有很好的集成:一旦设置好,以Pivotal Tracker ID为前缀的每个提交都会自动出现在相应的Pivotal票证下,例如: git commit -am '[#1234567] my new changes' git push origin git checkout 1234567_build_new_form 将使用github提交链接自动将注释“我的新更改”添加到1234567关键票据中 但是,每次都很容易忘记添加票证ID。如何简化/自动

Pivotal Tracker和Github有很好的集成:一旦设置好,以Pivotal Tracker ID为前缀的每个提交都会自动出现在相应的Pivotal票证下,例如:

git commit -am '[#1234567] my new changes'
git push origin
git checkout 1234567_build_new_form
将使用github提交链接自动将注释“我的新更改”添加到1234567关键票据中


但是,每次都很容易忘记添加票证ID。如何简化/自动化它?

解决方案是使用Git挂钩和功能分支。(建议使用Github流)

您必须安装此Git钩子(将文件复制到本地存储库):

在开始处理特定Pivotal票证之前,请创建一个以Pivotal Tracker ID为前缀的分支,例如:

git commit -am '[#1234567] my new changes'
git push origin
git checkout 1234567_build_new_form
然后像平常一样添加所有更改:

git commit -am 'form added'
git commit -am 'styles added'
git push origin
您将看到,git钩子脚本将自动从功能分支名称中提取关键跟踪器ID,并将其添加到每个注释的前面。如果需要,您仍然可以手动覆盖它(使用另一个ID)


这样,您就不必为每次提交手动添加关键ID。它也适用于GUI(如GIT Tower),因为这些GUI使用标准的GIT库/可执行文件。

这是一个基于Tamas解决方案的简单shell版本。它从分支名称的末尾获取ID

“my-feature-branch-12345678”=>“my-commit-mssg[#12345678]”

移动到.git/hooks/prepare commit msg并使其可执行:

#!/bin/bash
if story_id=`git branch | grep -oP '^\*.*\-\K[0-9]+$'`
then
  echo "[#$story_id]" >> "$1"
fi

安装“git pivotal tracker integration”gem

它向git添加了像start和finish这样的命令,以自动为分支和提交添加带有跟踪器故事ID的前缀,并将提交消息发布到跟踪器。当你调用'gitstart'时,它会拉master来确保你是最新的,为你创建一个分支,并在tracker中为你开始故事。完成这项工作,然后调用“git finish”,它会将您的分支合并回master并更新tracker

我的团队正在使用。每个开发人员都必须运行

$ git tracker init
Pivotal Tracker上的每个项目一次。然后,他们需要为每个新分支命名一个特殊的约定,并在其后面加上Pivotal Tracker story id。例如:

$ git checkout -b the-great-feathure-123456789
其中123456789将是关键的追踪者故事id

在这里,您将自动让每个提交引用该故事。另外,如果您使用GitHub执行拉取请求,您可以要求合并故事的审阅者添加到合并提交中:

[Fixes #123456789] ...

这样,您就不必单击“完成”按钮,GitHub将为您完成此操作。

我使用的是bookmarklet,它还可以设置故事标题中的提交消息

[#69609212] Add new Todo

你可以从最近的评论中得到它,但可能仍然是一个有用的评论。我想要@Sjoerd提供的解决方案,但我是mac用户;)

生成的代码如下所示

story_id=`git symbolic-ref --short -q HEAD | grep -o "^[[:digit:]]*"`
if [ ! -z "$story_id" -a "$story_id" != " " ]
then
  echo "[#$story_id] $(cat $1)" > "$1"
fi
请注意,我们在分支名称前加上问题ID,但修改正则表达式以匹配字符串的结尾而不是开头是非常基本的。我们还将问题ID添加到注释的开头,因为这在git日志中提供了更清晰的概述。如果上面的脚本是ues,则每个提交消息都将以
[#]
开头,分支名称不以实际问题ID开头时除外

应该注意的是,最好在
prepare commit msg
钩子中的任何其他代码之前添加此代码,因为这将导致所有提交都被预先处理,甚至自动合并等


希望这有帮助

这里有一块宝石,完全可以满足您的需求:

它允许从格式良好的菜单中选择故事:

[1] Removing Billing Page
[2] Welcome Email
[3] Tag campaign insertion points and campaigns with an identifier

Indexes(csv): 3
[campaign-tags 3020407]  [#44116647] Initial implementation of campaign tags
 1 file changed, 101 insertion(+), 2 deletions(-)

在OSXLion上不起作用,因为grep中不支持-P(Perl正则表达式)。由于我的一些团队忘记在合并消息中添加“修复”,因此关键的跟踪器仪表板最终失去了同步。因此,我建立了一个自动完成一个故事一旦合并按钮被点击!