web-dev-qa-db-fra.com

Git commit bash script

J'écris un script bash pour ajouter, valider, pousser tous les fichiers dans un répertoire.

#!/bin/bash  
git add .  
read -p "Commit description: " desc  
git commit -m $desc  
git Push Origin master

J'obtiens l'erreur suivante:

$ ./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

Je ne sais pas si c'est un problème de lecture dans le texte (ça echos bien) ou de le passer à git commit -m.

32
mgold

Tu dois faire:

git commit -m "$desc"

Dans le script actuel, test va comme message de validation et commit et script sont traités comme les prochains arguments.

43
manojlds

Voici une fusion des deux dernières réponses - enchaîner ensemble l'add -u est génial, mais la commande de lecture intégrée me causait des problèmes. J'y suis allé (dernière ligne utilisée pour mon Heroku Push, changez en 'git Push Origin head' si c'est votre méthode):

#!/bin/bash
read -p "Commit description: " desc
git add . && \
git add -u && \
git commit -m "$desc" && \
git Push heroku master
15
JayCrossler

il est utile de supprimer de l'index les fichiers réellement supprimés. git add -u s'occupe de cela. En outre, vous pouvez envisager de chaîner ces commandes ensemble comme ceci:

git add . && \
git add -u && \
git commit -m "$(read -p 'Commit description: ')" && \
git Push Origin HEAD

Si une commande échoue, elle cessera d'évaluer les commandes restantes.

Juste matière à réflexion (nourriture non testée).

Merci!

5
gahooa

Ce qui suit est un script que j'utilise pour gérer mes dépôts git - cela inclura l'option de pousser vers votre branche d'origine, votre site de transfert (si configuration) et votre site de production (si configuration)

#!/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

J'ai essayé d'inclure autant de commentaires que possible pour vous aider à comprendre ce que tout fait.

faites moi savoir si vous avez des questions.

aussi, j'ai cette configuration comme ça

echo "alias commit='sh /path/to/script.sh" >> ~/.bash_profilesource ~/.bash_profile

peut-être que cela peut aider quelqu'un qui cherche à accélérer le flux de travail

3
RobBenz
#!/bin/bash  
git pull
git add .
git commit -m "$*"
git Push

script d'appel avec commentaire sous forme d'arguments cmd, moins de clés pour pousser:

$ ./togithub test commit script 
3
godzilla

C'est ce que j'utilise la plupart du temps pour valider une branche locale et fusionner avec des branches distantes:

Ce petit script bash vous permet d'ajouter et de valider sur votre branche locale, de passer à une autre branche, de fusionner avec elle et de la pousser, et également de reprendre à votre branche locale, afin de continuer à travailler.

default="local-dev-whatever-the-name-of-your-local-branch"
read -p "Enter local branch [$default]: " local
local=${local:-$default}
echo "Local branch is $local"

if [ -z "$local" ]
then
bin/git-merge.sh
else
    printf "Enter remote branch: "
    read remote

    if [ -z "$remote" ]
    then
        printf "Cannot continue without remote branch!\n\n"
        exit
    fi

    git add .
    git add -u
    read -r -p 'Commit description: ' desc

    if [ -z "$desc" ]
    then
        printf "\nExit: commit description is empty!"
    fi

    git commit -m "$desc"
    git checkout $remote
    git status
    git merge $local
    git Push
    git status
    git checkout $local
    git status
    printf "\nEnd local commit on $local; merge and Push to branch $remote. Well done!\n"
fi
2
Filipe Fernandes