使用Git为Redmine做出贡献¶
此维基已过时.
Redmine的源树存储在Subversion中,所有内容最终都会输入其中。有些人喜欢使用Git,因为它具有分支和合并功能,并且不需要SVN提交权限即可提交。
注意:complete.org上的git仓库没有更新,截至本文撰写时,最后一次更改是在2008年9月8日星期一。推荐克隆GitHub镜像以获取最新的开发工作。
如果您正在寻找Subversion说明,它们可以在下载和检出页面找到。
初始化¶
如果您还没有Git,请参阅以下链接中的5分钟Git指南以获取下载信息。您需要至少1.5.x版本的Git。
要开始,请运行以下命令
git clone git://git.complete.org/branches/redmine-integration cd redmine-integration git config --add remote.origin.fetch +refs/remotes/svn/*:refs/remotes/svn/* git fetch
探索¶
您可以看到Git为您获取的所有分支
git branch -r | less
您会看到这样的输出(这里省略了很多行)
origin/HEAD origin/fb-bug-259-git origin/fb-bug-261-issue-redirect origin/fb-bug-641-context-done svn/git svn/issue_relations svn/mailing_lists svn/tags/0.6.3 svn/tags/0.6.3@1011 svn/time svn/trunk svn/wiki
"origin"分支由Git维护(没有对应的Subversion分支)。"svn"分支是Redmine Subversion仓库中相同分支的相同副本。
您将基于这些分支进行工作。
开始您的功能¶
使用git,分支成本低且合并容易,因此您通常希望为每个正在工作的功能创建一个新的分支。提交补丁时,单个分支可能对应Redmine中的一个单独的问题。
您希望补丁基于svn trunk。因此,您将设置一个分支如下
$ git branch my-feature svn/trunk Branch my-feature set up to track remote branch refs/remotes/svn/trunk. $ git checkout my-feature
第一行创建了一个名为my-feature
的分支,它将基于svn/trunk。第二个命令检出该分支,这意味着您的工作副本已切换到它,并且您所做的任何提交都将发布到该分支。
请注意,提交操作不会将补丁发送给任何人;因为Git是分布式的,提交仅在本地记录,直到您准备好将它们推送到上游。
您可以使用git branch
查看您所在的分支--它旁边会有一个星号,如下所示
$ git branch master * my-feature
在您的功能上工作¶
现在您已经创建了分支,是时候开始工作了。
以下是一些您可能想要使用的命令
任务 | 命令 |
---|---|
提交未决更改 | git commit -a |
将新文件添加到仓库 | git add filename |
从仓库和工作目录中删除文件 | git rm filename |
在仓库和工作目录中重命名文件 | git mv oldname newname |
查看历史 | git log |
获取帮助 | git commandname --help |
注意,git command
与 git-command
相同。您可以使用 man git-command
查看任何Git命令的手册页面。
与主干合并¶
如果您已经针对您的功能工作了一段时间,您可能会发现Subversion已经更新了。理想情况下,您希望您的最终差异与最新的主干修订版兼容,因此您希望您的补丁与该修订版兼容。要更新您的补丁以应用在最新的主干之上,请执行以下操作
git fetch git rebase svn/trunk
提交您的补丁¶
当您完成补丁的工作后,请确保您已经将其提交到Git。然后您可以生成差异。
您可以生成一个大的差异,包括您在分支上所做的所有更改,即使它们是在多个提交中完成的。运行以下命令
git diff svn/trunk..HEAD > /tmp/feature.diff
这意味着“计算主干与该分支最新提交之间的差异,并将其存储为位于 /tmp/feature.diff 的差异”。然后转到 redmine.org,创建一个问题,并将 /tmp/feature.diff 附加到该问题。
如果您希望为每个提交提交一个补丁,只需运行 git format-patch svn/trunk
。您将为每个提交生成一个文件,其中包括提交日志。然后您将想要在 redmine.org 附加这些文件。不过,通常您希望有一个大的差异。