2016-05-11 13 views
0

私はサブドメインのリストのためにいくつかのフォルダを持っています。各フォルダには、ホストを動的に推測し、いくつかの設定を読み込む同じスクリプトが含まれています。bashスクリプトをgit pullする

リストが成長しているので、git pullの各フォルダへのcdは退屈な作業になっています。

私のクライアントのホスティングサービスは限られており、プッシュを「パスワードなし」にするためにホストにsshキーを追加できないため、HTTPS経由でプルします。

イムないbashの専門家が、基本的なループは次のようになります。

for dir in /tmp/*/ 
do 
#passwordless pulls 
done 

今ここでキャッチされ、いくつかのフォルダが開発プルする必要があり、他はマスターブランチを引きます。

+0

「フォルダを作成する必要があり、他の人がマスターを作成する」と言っても、そのフォルダは常に既に存在しているか、少なくとも上流にあるでしょうか?つまり、単純な 'git pull'はできますか? – Mort

答えて

1
DEVLIST="list of hosts that pull develop" 
MASTERLIST="list of hosts that pull master" 

for D in ${DEVLIST} 
do 
    cd /tmp/${D} 
    git clone https://my.repo.edu/git/repo.git -b develop --single-branch 
done 

for M in ${MASTERLIST} 
do 
    cd /tmp/${M} 
    git clone https://my.repo.edu/git/repo.git -b master --single-branch 
done 
3
while read repo remote branch rest; do 
    ( cd $repo 
     git pull $remote $branch 
     # do whatever with $rest 
    ) 2>&1 | sed "s#^#$repo: #" & 
done <<EOD 
/path/to/repo origin branch1 
/path/to/another github master 
EOD 

それとも、代わりに<<EOD後にインライン化のファイルと</path/to/fileにものを置くことができます。

これは、すべてのプルを同時に起動します。もしそれらがたくさんある場合は、末尾の&;に置き換えるのが良いでしょう。

+0

あなたは 'sed'置換の最後の区切り文字がありません。スクリプトに(エスケープされていない)スラッシュを含む文字列を補間すると、区切り文字としてスラッシュを使用できません。 – tripleee

+0

不足しているターミネータを指摘してくれてありがとう。私はそれにスラッシュをつけたリモート名を追加した人は誰も聞いたことがないと思うが、もし誰かがセパレータとして文字を受け入れるなら、 '^'はおそらく良いだろう。 A'。 – jthill

+0

Uh、 '$ repo'を' sed'スクリプトに補間しています。これはあなたの例ではスラッシュです。 '| sed "s%^%$ repo:%" ' – tripleee