2016-04-08 12 views
6

私は自動スクリプトを作成しています。シェル:フォルダが既に存在する場合、gitクローンが存在する場合、失敗しません。

ある時点で、私はgit clone <repo>を呼び出しています。しかし、この操作が既に行われている可能性があります。

git clone --no-failを呼び出して、リポジトリが存在するかどうかを無視するにはどうすればよいですか?

ありがとう

答えて

8

最も安定した解決策は、単に失敗させることです。

あなたのような何かを行うことができます:

if [ ! -d "$FOLDER" ] ; then 
    git clone "$URL" "$FOLDER" 
fi 

それは競合状態に対して脆弱になります。

+1

私は競合状態をあまり心配していません。しかし、ディレクトリが実際のgitのものかどうか(git remoteや何かを調べることによって)チェックがあったら面白いと思ったでしょう。 'mkdir -p'のような振る舞いです。あなたの答えをありがとう –

+0

@AugustinRiedingerええ、私はまた、マニュアルページを検索していましたが、それはないようです.. – hek2mgl

0

あなたはそれがすでに存在する可能性がある理由や文脈を教えていただけません。

私は私のソフトウェアがちょうどその状態を知っている人の周りそこにあることを起こるどんな古いフォルダを使用したくないので、私は非常にのような git clone前に(必ず $folderが正気で作る) [ -e $folder ] && rm -rf $folderを追加します

...

+0

'rm -rf'アプローチは面白いです。しかし、理想的には、クローン操作は、フォルダーが存在し、同じであれば繰り返されません。 –

+0

まあ、フォルダが同じかどうかはわかりません。フォルダがそこにありますが、非常に古いバージョンのリポジトリが含まれている場合はどうなりますか?または間違った支店にいるのですか? – AnoE

1

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です。

+0

を使用しています。真実は本当に素晴らしいトリックです –

1

少し遅れていますが、似たようなことをしていますが、リポジトリがすでに存在していれば、リポジトリが最新の状態になっていることを確認してリポジトリがすでに存在していれば確実に確保できます最新です。

if [ ! -d "$FOLDER" ] ; then 
    git clone "$URL" "$FOLDER" 
else 
    cd "$FOLDER" 
    git pull "$URL" 
fi 
関連する問題