Спасибо всем за вклад и предложения.Вот как я заставил своих разработчиков и интеграторов использовать голые git push
и git pull
:
для разработчика
В простейшем рабочем процессе интеграционного менеджера, как описано выше, разработчик клонировал(git clone
) и, следовательно, автоматически отслеживает удаленную главную ветку в своей локальной главной ветке, поэтому все, что ей нужно:
git pull
Чтобы обновить свою локальную главную ветку.Если она работает в какой-то другой ветке, то она может обновить отслеживающую ветвь вверх по течению, как предложил Адам:
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) будет извлеченаdefault.
Так как заданная по умолчанию push-цель - это другая ветвь, а не одно и то же имя, мы не можем использовать push.default: отслеживание, текущий или сопоставление.Вместо этого, наш разработчик должен установить исходный код по умолчанию: refspec для всех сообщений в заданный пульт в своем файле .git / config, например:
[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
Для Интегратора
В этом простом случае интегратор обычно перемещается в одно место, источник / мастер.Если для 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/*
Спасибо всемза помощь!Надеюсь, что это поможет кому-то еще, кто использует гитолит и личные ветви за пределами свободного пространства.
Спасибо!
Тревор