2

我在让 hudson 签出我的 git repo 并合并到 master 时遇到问题。我对 Git 相当缺乏经验,所以术语(参考文献等......)对我来说仍然是全新的。我在下面包含了来自 Hudson 控制台的输出:

我认为正在发生的是 Hudson 正在检查远程上的 master 分支,但没有将它合并到它自己的 master 中。当我 ssh 进入我的服务器并进入工作区并输入git branch当前分支* (no branch)时,该“无分支”的日志是最新的。

如果我检查主分支,我会得到Your branch is behind the tracked remote branch 'origin/master' by x commits 很明显它没有合并到主分支中。这是如何工作的,它如何合并到“无分支”?

我在下面列出了我的 git 设置。不知道我需要做什么才能让 hudson 合并到它的主分支(或我为此指定的任何分支)我最终会将它设置为有一个登台和生产分支,所以我需要确保它拉并合并正确的分支,以便我可以运行部署。我从找到的一些教程中获得了这些哈德逊设置,所以我并不完全理解所有内容。例如,为什么要构建的分支是 */master 而不是 master(如果我将其更改为 master 似乎没有什么不同)

任何提示都非常感谢!

哈德逊 Git 设置

存储库的URL: 存储库的/home/git/repositories/my_repo.git
名称:origin
Refspec:+refs/heads/*:refs/remotes/origin/*
要构建的分支:*/master

Hudson Git 控制台日志

Last Built Revision: Revision 6ffd51afe6b87393d3215ab2bb30dbcd2de73dde (origin/master )
Checkout:workspace / /mnt/data/hudson/jobs/MyApp-master/workspace - hudson.remoting.LocalChannel@16a31bf
Fetching changes from the remote Git repository
Fetching upstream changes from /home/git/repositories/my_repo.git
[workspace] $ git fetch /home/git/repositories/my_repo.git +refs/heads/*:refs/remotes/origin/*
From /home/git/repositories/my_repo
   6ffd51a..7333c68  master     -> origin/master
[workspace] $ git ls-tree HEAD
Seen branch in repository heroku-devel/master
Seen branch in repository origin/staging
Seen branch in repository origin/master
Seen branch in repository origin/production
[workspace] $ git merge-base 45ae1c52e350fc1463f8b057d81b8cd4472ecdd9 7333c68d2b959eec6b472d7897ec30a3a3cfb5b5
Commencing build of Revision 7333c68d2b959eec6b472d7897ec30a3a3cfb5b5 (origin/master )
Checking out Revision 7333c68d2b959eec6b472d7897ec30a3a3cfb5b5 (origin/master )
[workspace] $ git checkout -f 7333c68d2b959eec6b472d7897ec30a3a3cfb5b5
[workspace] $ git tag -a -f -m "Hudson Build #94" hudson-MyApp-master-94
Recording changes in branch origin/master
[workspace] $ git log --numstat -M --summary --pretty=raw 6ffd51afe6b87393d3215ab2bb30dbcd2de73dde..7333c68d2b959eec6b472d7897ec30a3a3cfb5b5

版本
Hudson:1.337
Git:1.5.6.5
Hudson Git 插件:0.7.3
Linux:Debian Lenny 5.0.3

4

2 回答 2

2

只需取消选中“在构建前合并”并将您的班组设置为大师。您不想在构建之前合并...它用于将主题分支合并到主分支(或任何分支),然后如果它构建/集成并且构建成功,则将其推回主分支(或任何分支)。

哈德逊插件实际上是故意让你进入(没有分支)......起初有点令人困惑,但这是我试图解释的尝试。

当您运行 git checkout {Some SHA} 时,git 最终处于(无分支)或所谓的分离头状态。SHA 是提交的唯一 id(和其他东西,但出于本解释的目的,它用于提交)。这是一个功能......不是错误。当你检查一个 SHA 时,你告诉 git 你想将标题为 HEAD 的符号修订指向一个特定的 SHA。不用担心...您仍然在主人身上,您只是处于超然状态。

我对 hudson git 插件为什么这样做的假设是因为当人们提交到 git 存储库时,符号 HEAD 修订版在远程存储库中移动。所以插件发出这样的命令(用简单的英语)

  1. git fetch(将远程 git 存储库中的最新远程分支拉到我的远程分支副本中 - 您可以使用 git branch -a 或 -r 看到这一点)
  2. git rev-parse origin/master (在本例中,我们将使用 xxxx 作为 SHA)
  3. git checkout xxxx (从远程仓库检查最新的 SHA ......这将使您处于分离的头部状态。)

好的......现在我们准备好构建了。(它还执行其他操作,例如将最后一个 SHA 与当前 SHA 进行比较,以便它可以吐出两个构建之间的更改列表。)

希望这可以帮助您继续前进并对其进行一些解释。(或者至少是在互联网上找到这个的下一个人。)

于 2010-06-04T22:55:15.780 回答
0

解决方案是安装 Hudson Git 插件 v1.0。它允许一个可选的本地分支将 HEAD 合并到。

于 2010-08-08T20:46:15.333 回答