Когда вы работаете с Subversion, вы мало говорите о рабочем процессе, потому что в 99% случаев доступен только один:
..
svn update
svn status
svn commit
..
У меня есть псевдоним «ss» для «svn update && svn status», который я запускаю очень часто для любого проекта, с которым сталкиваюсь. Я полагаю, что большинство проблем Subversion вызвано тем, что эти две простые команды не выполняются вовремя.
Но в Git все по-другому. Поскольку топология сети, методология ветвления и шаблоны поведения могут различаться для каждой команды (и это то, что делает Git git!), Есть место, чтобы поговорить о рабочем процессе Git .
В своих проектах я не часто использую «ветки функций», но всегда работаю с двумя ветками: «master» и «dev» . Развитие происходит только в «dev», который перебазируется и объединяется с «master», когда я чувствую, что это имеет смысл. Ночные сборки создают их все, но только «главные» артефакты развертываются в Artifactory в виде моментальных снимков.
Для 2 проектов у меня есть 4 филиала и три разных среды, где я могу обновить любой из них: домашний, офисный или нетбук. Поскольку я чувствовал, что слишком много времени тратится на синхронизацию каждого проекта с GitHub, я собрал несколько скриптов, чтобы легко обновлять и вносить изменения для каждого из них.
«update.bat» :
@echo off
call git checkout dev
call git status
call git pull origin dev
call git checkout master
call git status
call git pull origin master
call git checkout dev
«merge.bat» :
@echo off
call git checkout dev
call git status
call git rebase master
call git checkout master
call git status
call git merge dev
call git push origin
call git checkout dev
Поэтому, когда я подхожу к проекту, я просто набираю «update», чтобы запустить его, или «merge», чтобы завершить его. Есть также скрипт «merge-all.bat», чтобы назвать его днем:
@echo off
cls
e:
echo "=========> gcommons"
cd \projects\gcommons
call update
call merge
echo "=========> maven-plugins"
cd \projects\maven-plugins
call update
call merge
echo "=========> scripts"
cd \projects\scripts
call git status
call git pull origin master
call git push origin master
echo "=========> maven-plugins-test"
cd \projects\maven-plugins-test
call git status
call git pull origin master
call git push origin master
Если все чисто, и никаких обновлений не осталось, я ожидаю, что это покажет:
"=========> gcommons"
Already on 'dev'
# On branch dev
nothing to commit (working directory clean)
From github.com:evgeny-goldin/gcommons
* branch dev -> FETCH_HEAD
Already up-to-date.
Switched to branch 'master'
# On branch master
nothing to commit (working directory clean)
From github.com:evgeny-goldin/gcommons
* branch master -> FETCH_HEAD
Already up-to-date.
Switched to branch 'dev'
Already on 'dev'
# On branch dev
nothing to commit (working directory clean)
Current branch dev is up to date.
Switched to branch 'master'
# On branch master
nothing to commit (working directory clean)
Already up-to-date.
Everything up-to-date
Switched to branch 'dev'
"=========> maven-plugins"
Switched to branch 'dev'
# On branch dev
nothing to commit (working directory clean)
From github.com:evgeny-goldin/maven-plugins
* branch dev -> FETCH_HEAD
Already up-to-date.
Switched to branch 'master'
# On branch master
nothing to commit (working directory clean)
From github.com:evgeny-goldin/maven-plugins
* branch master -> FETCH_HEAD
Already up-to-date.
Switched to branch 'dev'
Already on 'dev'
# On branch dev
nothing to commit (working directory clean)
Current branch dev is up to date.
Switched to branch 'master'
# On branch master
nothing to commit (working directory clean)
Already up-to-date.
Everything up-to-date
Switched to branch 'dev'
"=========> scripts"
# On branch master
nothing to commit (working directory clean)
From github.com:evgeny-goldin/scripts
* branch master -> FETCH_HEAD
Already up-to-date.
Everything up-to-date
"=========> maven-plugins-test"
# On branch master
nothing to commit (working directory clean)
From github.com:evgeny-goldin/maven-plugins-test
* branch master -> FETCH_HEAD
Already up-to-date.
Everything up-to-date