在 GitHub 上,我为我的公司使用一个帐户,这是“有福”的代码所在的地方;然后我维护一个个人分支,在那里我处理还不太稳定的事情。在我的本地机器上,我在一个 repo 中处理这两个,因此 master 是受祝福的代码(并推送到公司帐户),而所有其他分支都用于我的 fork。这是我的 .git/config 的一部分:
[remote "origin"]
fetch = +refs/heads/*:refs/remotes/origin/*
url = git@github.com:xiongchiamiov/fourU.git
[branch "hacking"]
remote = origin
merge = refs/heads/hacking
[branch "editor"]
remote = origin
merge = refs/heads/editor
[branch "problem-utils"]
remote = origin
merge = refs/heads/problem-utils
[branch "tests"]
remote = origin
merge = refs/heads/tests
[remote "trunk"]
fetch = +refs/heads/*:refs/remotes/trunk/*
url = git@github.com:xyztextbooks/fourU.git
[branch "master"]
remote = trunk
merge = refs/heads/master
由于我拥有公司 repo 的提交权限,因此我可以将一个分支的提交合并(或挑选)到另一个分支,并将其推送到适当的位置。现在,当然不需要单独的 repos,但由于这是一个开源项目,我喜欢让“官方”repo 不受我的切线创建的随机分支的影响。一旦达到版本控制点,就会有一个 0.x 分支,每个版本都有标签(0.1、0.1.1、0.2 等),这特别有利,因为 github 会自动创建文件的 tarball在每个标签上,非常适合将特定版本下拉到不需要完整历史记录的机器上。
你应该阅读 github 博客;他们有一些很好的帖子描述了他们的部署工作流程,当然这很大程度上涉及到 git。