分布式开发

Git是一种与其他开发人员交换提交(组织成分支)的工具。作为一个分布式修订控制系统,它没有中央服务器的概念。从您的角度来看,Sage-trac服务器只是许多可能的远程存储库之一。这使您可以使用和试验与其他开发人员交互的不同方式。在这一章中,我们描述了一些为Sage发展的常用方法。

为了简单起见,我们假设两个开发人员(Alice和Bob)正在协作处理一个问题。开罚单的第一步总是一样的,可以由爱丽丝或鲍勃或第三者执行。

简单工作流

developer/static/flowchart.*
  1. 爱丽丝创造了一个 new local branchcommits 更改了Sage来源。

  2. 爱丽丝 uploads her branch 到trac服务器。这将用她的远程分支名称填充“Branch:”字段 u/alice/description .

  3. 鲍勃 downloads Alice's branch ,查看源代码,并在罚单上留下关于Alice代码错误的注释。

  4. Alice修复了当前分支上的错误,并上传更新后的分支。

  5. 鲍勃 retrieves Alice's updates 并回顾这些变化。

  6. 一旦鲍勃满意了,他就把票定为正面评价。“Author:”字段设置为Alice的全名,“Reviewer:”字段设置为Bob的全名。

或者,Bob可能想自己做一些改变。那么,我们应该

  1. 鲍勃 downloads Alice's branch ,进行更改,以及 commits 给他当地的分公司。

  2. 鲍勃 uploads his branch 到trac服务器。这将用他的远程分支名称填充“Branch:”字段 u/bob/description .

  3. 爱丽丝 downloads Bob's branch 并回顾他的变化。

  4. 一旦爱丽丝满意了,她就给她开了一张“正面评价”的罚单。如果两个投稿的大小相当,那么“Author:”和“Reviewer:”字段将同时设置为Alice和Bob的全名。

公共存储库

除了用户分支 (u/<user>/<description> 在Sage-trac服务器上 <user> 替换为只有您可以写入的trac用户名),您还可以创建一个公共分支,每个拥有trac帐户的人都可以写入该分支。这些从 public/ 再加上一些描述。为了避免分支名称冲突,最好在分支名称中包含您的trac用户名,因此建议您使用 public/<user>/<description> 作为分支名称。现在所有票证作者都推到同一个远程分支。

  1. 爱丽丝创造了一个 new local branchcommits 对Sage库进行了一些更改。

  2. 爱丽丝 uploads her branch 作为到trac服务器的公共分支。这将用她的远程分支名称填充“Branch:”字段 public/alice/description .

  3. 鲍勃 downloads Alice's branch 并修改了他的本地副本。

  4. 鲍勃 commits 改变了他当地的Sage来源分支。

  5. Bob将他的更改上载到联合远程存储库:

    [bob@localhost sage]$ git push trac local_branch:public/alice/description
    
  6. 爱丽丝 retrieves Bob's updates ,进行更多更改、提交并将其推送到trac。

  7. 查利审查最终版本,然后将票设为正面评论。“Author:”字段设置为Alice和Bob的全名,“Reviewer:”字段设置为Charly的全名。

GitHub

另一个可能的工作流程是使用GitHub(或任何其他第三方git存储库)协作编辑您的新分支,只有当您和您的票证共同作者满意时,才将结果推送到trac。

叉子

第一步是创建您自己的Sage存储库的fork;只需单击 Sage GitHub repository . 然后将其作为远程之一添加到本地Sage存储库中。在下面,我们将为这个远程存储库使用标签“github”,当然您也可以自由使用另一个:

$ git remote add github git@github.com:github_user_name/sage.git
$ git remote -v
github      git@github.com:github_user_name/sage.git (fetch)
github      git@github.com:github_user_name/sage.git (push)
trac        git@trac.sagemath.org:sage.git (fetch)
trac        git@trac.sagemath.org:sage.git (push)
$ git fetch github
remote: Counting objects: 107, done.
remote: Compressing objects: 100% (63/63), done.
remote: Total 74 (delta 41), reused 40 (delta 10)
Unpacking objects: 100% (74/74), done.
From github.com:github_user_name/sage
* [new branch]      master     -> github/master

发展

现在,您可以使用github存储库来开发票据分支;首先创建一个新分支:

$ git checkout -b my_branch --track github/master
Branch my_branch set up to track remote branch master from github.
Switched to a new branch 'my_branch'
$ git push github my_branch
Total 0 (delta 0), reused 0 (delta 0)
To git@github.com:github_user_name/sage.git
 * [new branch]      my_branch -> my_branch

因为 --track 选项,即 git pull 命令将默认从github分支下载合著者的更改。或者,您可以在fork的GitHub网页上创建一个新的分支。

此时,您可以使用您喜欢的GitHub工作流。特别是,你的选择是

  • 为您的合著者授予github fork的写权限。每个作者编辑/提交到他们自己的本地副本,并共同推送到您的github分支。

  • 让每个合著者创建他们自己的fork并将pull请求发送给GitHub fork。

  • 使用GitHub网页编辑和提交功能,这样就可以在不使用本地计算机的情况下进行更改。

推送至Trac

当您对分支感到满意时,将其推送到Sage-trac服务器:

$ git push trac HEAD:u/user/description

然后填写trac票证说明中的“分支”字段,如中所述 将更改推送到罚单 .