ディレクトリ内のすべてのファイルを追加、コミット、プッシュする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
sは問題ありません)、それをgit commit -m
に渡すのかわかりません。
あなたはしなければならない:
git commit -m "$desc"
現在のスクリプトでは、test
はコミットメッセージとして扱われ、commit
とscript
は次の引数として扱われます。
最後の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
実際に削除されたファイルをインデックスから削除すると便利です。 git add -u
はこれを処理します。また、次のようにこれらのコマンドを連鎖させることを検討することもできます。
git add . && \
git add -u && \
git commit -m "$(read -p 'Commit description: ')" && \
git Push Origin HEAD
コマンドが失敗すると、残りのコマンドの評価を停止します。
思考の糧(未検証の食物)。
ありがとう!
以下は、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_profile
source ~/.bash_profile
多分これはワークフローを加速したい人に役立つかもしれません
#!/bin/bash
git pull
git add .
git commit -m "$*"
git Push
cmd argsとしてコメントを使用して、プッシュするキーが少ないスクリプトを呼び出します。
$ ./togithub test commit script
これは私がローカルブランチをコミットし、リモートブランチとマージするためにほとんどの時間を使用するものです:
この小さな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