Git commit bash script
Solution 1
You have to do:
git commit -m "$desc"
In the current script, test
is going as commit message and commit
and script
are being treated as next arguments.
Solution 2
Here's a merge of the last two answers - chaining together the add -u is awesome, but the embedded read command was causing me troubles. I went with (last line used for my heroku push, change to 'git push origin head' if that's your method):
#!/bin/bash
read -p "Commit description: " desc
git add . && \
git add -u && \
git commit -m "$desc" && \
git push heroku master
Solution 3
it is helpful to remove from the index the files that have actually been deleted. git add -u
takes care of this. Also, you may want to consider chaining these commands together like this:
git add . && \
git add -u && \
git commit -m "$(read -p 'Commit description: ')" && \
git push origin HEAD
If any command fails, it will stop evaluating the remaining commands.
Just food for thought (untested food).
Thanks!
Solution 4
#!/bin/bash
git pull
git add .
git commit -m "$*"
git push
call script with comment as cmd args, less keys to push:
$ ./togithub test commit script
Solution 5
The following is a script that I use to mange my git repos - this will include the option to push to your origin branch, your staging site ( if setup ), and your production site ( if setup )
#!/usr/bin/env bash
# die script -- just in case
die() { echo "$@" 1>&2 ; exit 1; }
# kill message when dead
KILL="Invalid Command"
# function to see where to push what branch
pushing() {
git branch
sleep 1
tput setaf 1;echo What Branch?;tput sgr0
read -r branch
tput setaf 2;echo Where to? You can say 'origin', 'staging', or 'production';tput sgr0
read -r ans
if [ "$ans" = "origin" ] || [ "$ans" = "staging" ] || [ "$ans" = "production" ]
then
git push "$ans" "$branch"
elif [ "$ans" = "no" ]
then
echo "Okay"
else die "$KILL"
fi
}
# function to see how many more times
more() {
tput setaf 2;echo More?;tput sgr0
read -r more
if [ "$more" = "yes" ]
then
pushing
elif [ "$more" = "no" ]
then
die "Goodbye"
else die "$KILL"
fi
}
# get the root directory in case you run script from deeper into the repo
gr="$(git rev-parse --show-toplevel)"
cd "$gr" || exit
tput setaf 5;pwd;tput sgr0
# begin commit input
git add . -A
read -r -p "Commit description: " desc
git commit -m "$desc"
# find out if we're pushin somewhere
tput setaf 2;echo wanna do some pushin?;tput sgr0
read -r push
if [ "$push" = "yes" ]
then
pushing # you know this function
until [ "$more" = "no" ]
do
more # you know this function
done
elif [ "$push" = "no" ]
then
echo "Okay"
else die "$KILL"
fi
I tried to include as many comments as possible to help you understand what everything does.
let me know if you have any questions.
also, i have this setup like this
echo "alias commit='sh /path/to/script.sh" >> ~/.bash_profile
source ~/.bash_profile
maybe this can help someone looking to accelerate workflow
mgold
Updated on July 09, 2022Comments
-
mgold about 2 years
I'm writing a bash script to add, commit, push all files in a directory.
#!/bin/bash git add . read -p "Commit description: " desc git commit -m $desc git push origin master
I'm getting the following error:
$ ./togithub Commit description: test commit script error: pathspec 'commit' did not match any file(s) known to git. error: pathspec 'script"' did not match any file(s) known to git. Everything up-to-date
I'm not sure if this is a problem with reading in the text (it
echo
s fine) or passing it togit commit -m
. -
jørgensen over 12 years"Do proper quoting" can never be overstated enough. Way too many subpar “howtos” and halfcorrect advice/examples on the net...
-
bluegray over 12 yearsYou can also use
#!/bin/bash -e
to make the script exit if any of the commands fail. -
gniourf_gniourf almost 8 yearsFunny that this got upvoted so much… you'll get empty commit messages…
-
dǝɥɔS ʇoıןןƎ over 5 yearsJust do
git add -A .
instead ofgit add . && git add -u
-
chuckwired over 3 years100% - if you're passing the entire command as an argument you can backslash the quotes i.e.
./myscript.sh git commit -m \"my commit message\"