HiveBrain v1.2.0
Get Started
← Back to all entries
patternshellgitMinor

Git merge script

Submitted by: @import:stackexchange-codereview··
0
Viewed 0 times
scriptgitmerge

Problem

The branches I need to merge are called test and test-passed. Merging will always be fast-forward, from test to test-passed as commits to test-passed are only done automatically from test. This is currently working, just wondering if the approach is correct. The script is executed by Hudson, once all testing is complete.

git status
git reset --hard
git pull origin test
git checkout origin/test
git pull origin test-passed
git checkout origin/test-passed
git merge origin/test
git push origin HEAD:test-passed


One specific question I have, is if I need to create local branches as well (-b) or is that not required?

Output from above:

+ git status
HEAD detached from origin/test-passed
nothing to commit, working directory clean
+ git reset --hard
HEAD is now at 16a2d8d updated version
+ git pull origin test
From ssh://github.com/myrepo.git
* branch test -> FETCH_HEAD
Already up-to-date.
+ git checkout origin/test
HEAD is now at 16a2d8d... updated version
+ git pull origin test-passed
From ssh://github.com/myrepo.git
* branch test-passed -> FETCH_HEAD
Already up-to-date.
+ git checkout origin/test-passed
Previous HEAD position was 16a2d8d... updated version
HEAD is now at 2aa260d... Merge branch 'dev-integration' into test
+ git merge origin/test
Updating 2aa260d..16a2d8d
Fast-forward
app/application.properties | 8 ++++----
4 files changed, 14 insertions(+), 5 deletions(-)
+ git push origin HEAD:test-passed
To ssh://git@github.com/myrepo.git
2aa260d..16a2d8d HEAD -> test-passed

Solution

use variables

Pulling common elements into variables will make those things easier to follow and change later.

BRANCH_TEST="test"
BRANCH_PASSED="test-passed"

git status
git reset --hard
git pull origin $BRANCH_TEST
git checkout origin/$BRANCH_TEST
git pull origin $BRANCH_PASSED
git checkout origin/$BRANCH_PASSED
git merge origin/$BRANCH_TEST
git push origin HEAD:$BRANCH_PASSED


error checking

Is there any chance one of the steps will fail? You could check the return value of each step or just set -e to get bash to exit on any command having an error.

There is also bash strict mode which builds on set -e with some other things to make coding in the shell less surprising.
documentation

It would be a good idea to explain what the intent of the code is.
shebang

Presumably this is a bash script. It would be good to make it clear by putting

#!/bin/bash


as the first line.

Code Snippets

BRANCH_TEST="test"
BRANCH_PASSED="test-passed"

git status
git reset --hard
git pull origin $BRANCH_TEST
git checkout origin/$BRANCH_TEST
git pull origin $BRANCH_PASSED
git checkout origin/$BRANCH_PASSED
git merge origin/$BRANCH_TEST
git push origin HEAD:$BRANCH_PASSED
#!/bin/bash

Context

StackExchange Code Review Q#82483, answer score: 2

Revisions (0)

No revisions yet.