私は自動スクリプトを作成しています。シェル:フォルダが既に存在する場合、gitクローンが存在する場合、失敗しません。
ある時点で、私はgit clone <repo>
を呼び出しています。しかし、この操作が既に行われている可能性があります。
git clone --no-fail
を呼び出して、リポジトリが存在するかどうかを無視するにはどうすればよいですか?
ありがとう
私は自動スクリプトを作成しています。シェル:フォルダが既に存在する場合、gitクローンが存在する場合、失敗しません。
ある時点で、私はgit clone <repo>
を呼び出しています。しかし、この操作が既に行われている可能性があります。
git clone --no-fail
を呼び出して、リポジトリが存在するかどうかを無視するにはどうすればよいですか?
ありがとう
最も安定した解決策は、単に失敗させることです。
あなたのような何かを行うことができます:
if [ ! -d "$FOLDER" ] ; then
git clone "$URL" "$FOLDER"
fi
それは競合状態に対して脆弱になります。
あなたはそれがすでに存在する可能性がある理由や文脈を教えていただけません。
私は私のソフトウェアがちょうどその状態を知っている人の周りそこにあることを起こるどんな古いフォルダを使用したくないので、私は非常にのようなgit clone
前に(必ず
$folder
が正気で作る)
[ -e $folder ] && rm -rf $folder
を追加します
...
'rm -rf'アプローチは面白いです。しかし、理想的には、クローン操作は、フォルダーが存在し、同じであれば繰り返されません。 –
まあ、フォルダが同じかどうかはわかりません。フォルダがそこにありますが、非常に古いバージョンのリポジトリが含まれている場合はどうなりますか?または間違った支店にいるのですか? – AnoE
git clone $url || true
は、set -e
でシェルを実行すると、失敗したことになります。git clone
に失敗しました。
これがあなたの望むものでない場合は、すでに存在するターゲットディレクトリに対する明示的なテストを伴う提案された解決策が機能するはずです。
唯一の問題は、Gitの名前を調べる方法をシミュレートする必要があることです。
このような何かが動作するはず:
url=git://host/path/name.git
last=${url##*/}
bare=${last%%.git}
test -e "$bare" || git clone "$url"
##
と%%
とのそれら "トリック" standard featues of the "parameter expansion" rules of POSIX shellsです。
を使用しています。真実は本当に素晴らしいトリックです –
少し遅れていますが、似たようなことをしていますが、リポジトリがすでに存在していれば、リポジトリが最新の状態になっていることを確認してリポジトリがすでに存在していれば確実に確保できます最新です。
if [ ! -d "$FOLDER" ] ; then
git clone "$URL" "$FOLDER"
else
cd "$FOLDER"
git pull "$URL"
fi
私は競合状態をあまり心配していません。しかし、ディレクトリが実際のgitのものかどうか(git remoteや何かを調べることによって)チェックがあったら面白いと思ったでしょう。 'mkdir -p'のような振る舞いです。あなたの答えをありがとう –
@AugustinRiedingerええ、私はまた、マニュアルページを検索していましたが、それはないようです.. – hek2mgl