感谢大家的意见和建议。这是我如何让我的开发人员和集成者使用裸的
git push
和
git pull
的方法:
对于开发人员
在最简单的集成管理工作流中,开发人员已经克隆了(git clone
),因此自动跟踪她本地主分支中的远程主分支,所以她只需要:
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为:tracking、current或matching。相反,我们的开发人员必须在她的.git/config文件中为所有推送设置默认源:目标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 设置为 matching、tracking 或 current,则裸推送将起作用,如下所示:
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
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 = +refs/personal/devX/*:refs/remotes/origin/personal/devX/*
感谢大家的帮助!希望这能帮助到其他使用gitolite和个人分支的人。
谢谢!
Trevor