Git commit bash script

66,453

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

Share:
66,453
mgold
Author by

mgold

Updated on July 09, 2022

Comments

  • mgold
    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 echos fine) or passing it to git commit -m.

  • jørgensen
    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
    bluegray over 12 years
    You can also use #!/bin/bash -e to make the script exit if any of the commands fail.
  • gniourf_gniourf
    gniourf_gniourf almost 8 years
    Funny that this got upvoted so much… you'll get empty commit messages…
  • dǝɥɔS ʇoıןןƎ
    dǝɥɔS ʇoıןןƎ over 5 years
    Just do git add -A . instead of git add . && git add -u
  • chuckwired
    chuckwired over 3 years
    100% - 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\"