Git commit bash скрипт - PullRequest
       5

Git commit bash скрипт

31 голосов
/ 13 декабря 2011

Я пишу bash-скрипт для добавления, фиксации, отправки всех файлов в каталоге.

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

Я получаю следующую ошибку:

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

Я не уверен, если это проблема с чтением в тексте (это нормально echo) или передачей его на git commit -m.

Ответы [ 6 ]

42 голосов
/ 13 декабря 2011

Вы должны сделать:

git commit -m "$desc"

В текущем сценарии test идет как сообщение о коммите, а commit и script обрабатываются как следующие аргументы.

14 голосов
/ 01 апреля 2012

Вот слияние двух последних ответов - объединение в цепочку add -u - это здорово, но встроенная команда чтения доставляла мне неприятности. Я пошел с (последняя строка, использованная для моего толчка герою, измените на 'git push origin head', если это ваш метод):

#!/bin/bash
read -p "Commit description: " desc
git add . && \
git add -u && \
git commit -m "$desc" && \
git push heroku master
5 голосов
/ 13 декабря 2011

полезно удалить из индекса файлы, которые были фактически удалены.git add -u позаботится об этом.Кроме того, вы можете рассмотреть возможность объединения этих команд вместе, например:

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

Если какая-либо команда не будет выполнена, она прекратит оценку оставшихся команд.

Просто пища для размышлений (непроверенная еда).

Спасибо!

3 голосов
/ 03 февраля 2016

Ниже приведен сценарий, который я использую для управления своими репозиториями git. Он будет включать в себя возможность отправки в исходную ветку, на промежуточный сайт (при настройке) и на производственный сайт (при настройке)

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

Я попытался включить как можно больше комментариев, чтобы помочь вам понять, что все делает.

дайте мне знать, если у вас есть какие-либо вопросы.

также, у меня есть такая настройка, как эта

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

возможно, это может помочь кому-то, желающему ускорить рабочий процесс

3 голосов
/ 26 июля 2014
#!/bin/bash  
git pull
git add .
git commit -m "$*"
git push

вызов скрипта с комментариями в виде аргументов cmd, меньше клавиш для нажатия:

$ ./togithub test commit script 
2 голосов
/ 07 октября 2016

Это то, что я использую большую часть времени для фиксации локальной ветви и объединения с удаленными ветками:

Этот небольшой скрипт bash позволяет вам добавлять и фиксировать в вашей локальной ветке, оформить заказ в другую ветку, объединиться с ним и нажать на него, а также оформить заказ еще раз, чтобы ваш местный филиал, так что вы продолжаете работать.

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...