2013-05-16 27 views
0

我正在創建一個腳本,它將拉下最新的主代碼分支,並檢查是否有任何文件名是SQL。在確定文件名後,我將獲取存儲過程。目前我已經拉動代碼並逐行讀取輸出,但是我的grep命令似乎無法找到sql文件名。這是我所擁有的從git pull輸出中提取文件名

#!/bin/bash 

# Pull all of the latest code for the master branch, and set the commit log to 
# a variable 
commit_log=$(git pull origin master --quiet) 

#read the commit log line by line 
echo $commit_log | while read line 
do 
    if [ `echo "$line" | grep -E "(\.sql)$"` ]; then 
     echo "SQL" 
    fi  
    echo "LINE:" $line 
done 

我沒有卡在bash上,我也可以在perl中做到這一點。

+0

拉後,運行'git的差異--name只HEAD^1..HEAD',並從那裏使用的文件名。 – rpkamp

+1

@ScallioXTX我會補充說,你應該檢查你的當前版本拉之前,然後顯示你的版本和新頭之間的差異。當拉你可以收到很多提交在一堆......或沒有。這個任務並不是那麼簡單。如果你合併,你可能會進行修改,甚至不是最終歷史的一部分。 git pull --rebase也可能是個問題。 – Lynch

+0

在你的構造中,括號和反引號是錯誤的。把它們留下。 – michas

回答

2

拉出後,新狀態存儲在HEAD中,而舊狀態存儲在HEAD @ {1}中。 您可以用git diff --name-only在兩者之間找到更改的文件。 一個小型Perl的單行似乎是檢查文件名的最簡單的方法:

git pull 
git diff --name-only [email protected]{1} | perl -wpe 'print "SQL:" if /\.sql$/'