感谢大家的意见和建议。以下是我如何让我的开发人员和集成人员使用 bare git push
and git pull
:
对于开发人员
如上所述,在最简单的集成管理器工作流程中,开发人员已克隆 ( git clone
),因此会自动跟踪其本地 master 分支中的远程 master 分支,因此她只需要:
git pull
更新她的本地主分支。如果她在其他分支工作,那么她可以更新正在跟踪的上游分支,正如 Adam 建议的那样:
git branch --set-upstream MYOLDBRANCH origin/master
# or, use longer, more explicit syntax, like:
git branch --set-upstream MYOLDBRANCH refs/remotes/origin/master
默认情况下,跟踪的分支(在本例中为 origin/master)将被拉取。
由于默认推送目标是不同的分支而不是相同的名称,我们不能利用 push.default 的优势:跟踪、当前或匹配。相反,我们的开发人员必须在她的 .git/config 文件中为所有推送到给定远程设置默认的 source:destination refspec,如下所示:
[remote "origin"]
fetch = +refs/heads/*:refs/remotes/origin/*
url = GITREPOHOSTNAME:REPONAME
push = master:refs/personal/MYDEVNAME/MYBRANCHNAME
她还可以创建一个别名,如下所示:
git config alias.pushToMyBr 'push origin master:refs/personal/MYDEVNAME/MYBRANCHNAME
别名非常强大,在避免击键方面提供了最大的灵活性。:-) 上述情况可以通过简单的方式执行:
git pushToMyBr
对于集成商
在这种简单的情况下,集成商通常会推送到一个地方,即 origin/master。如果 push.default 设置为匹配、跟踪或当前,那么裸推送将起作用,如下所示:
git config push.default current
git checkout master
git push
来自各种个人开发者分支的频繁拉动是更困难的情况。集成商可以使用别名来简化任务,如下所示:
git config alias.pullFromXY 'pull origin refs/personal/DEVNAMEX/BRANCHNAMEY:master
# or, pull to a specific topic branch
git config alias.pullFromABtoC 'pull origin refs/personal/DEVNAMEA/BRANCHNAMEB:branchC'
集成商还可以创建分支来跟踪开发人员的个人远程分支,如下所示:
git checkout -b test_devXbranchY origin/personal/DEVNAMEX/BRANCHNAMEY
# or, use a more specific syntax:
git checkout -b test_devXbranchY refs/remotes/origin/personal/DEVNAMEX/BRANCHNAMEY
为此,集成商必须将个人分支添加到她的提取列表中。这可以通过直接编辑她的 .git/config 来完成,如下所示:(我不知道如何使用 git-config 或任何其他 git 命令来做到这一点。)
[remote "origin"]
fetch = +refs/heads/*:refs/remotes/origin/*
url = MYGITHOSTNAME:MYREPONAME
fetch = +refs/personal/*:refs/remotes/origin/personal/*
# Fetch a specific developer's branches:
fetch = +refs/personal/devX/*:refs/remotes/origin/personal/devX/*
感谢大家的帮助!希望这有助于在头部空间之外使用 gitolite 和个人分支的其他人。
谢谢!
特雷弗