web-dev-qa-db-ja.com

Gitコミットbashスクリプト

ディレクトリ内のすべてのファイルを追加、コミット、プッシュする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

これがテキストの読み取りに問題があるか(echosは問題ありません)、それをgit commit -mに渡すのかわかりません。

32
mgold

あなたはしなければならない:

git commit -m "$desc"

現在のスクリプトでは、testはコミットメッセージとして扱われ、commitscriptは次の引数として扱われます。

43
manojlds

最後の2つの答えをまとめたものです-add -uをつなぎ合わせるのは素晴らしいですが、埋め込まれたreadコマンドが問題を引き起こしていました。私は一緒に行きました(私のheroku Pushに使用された最後の行、それがあなたの方法であれば「git Push Origin head」に変更してください):

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

実際に削除されたファイルをインデックスから削除すると便利です。 git add -uはこれを処理します。また、次のようにこれらのコマンドを連鎖させることを検討することもできます。

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

コマンドが失敗すると、残りのコマンドの評価を停止します。

思考の糧(未検証の食物)。

ありがとう!

5
gahooa

以下は、gitリポジトリを管理するために使用するスクリプトです。これには、Originブランチ、ステージングサイト(セットアップの場合)、および運用サイト(セットアップの場合)にプッシュするオプションが含まれます。

#!/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_profilesource ~/.bash_profile

多分これはワークフローを加速したい人に役立つかもしれません

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

cmd argsとしてコメントを使用して、プッシュするキーが少ないスクリプトを呼び出します。

$ ./togithub test commit script 
3
godzilla

これは私がローカルブランチをコミットし、リモートブランチとマージするためにほとんどの時間を使用するものです:

この小さな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
2