2012-06-26 86 views
3

我想提示您確認[yes/no]每個命令git push和pull哪些聯繫人git服務器。有沒有一種方法可以包含任何命令/腳本來實現這一點?所以用戶可以給出輸入,之後只有git才能進行該操作。本地執行的Git pull hook腳本

回答

1

我相信你正在尋找Git hooks

雖然你將不得不把鉤子放在那裏。我不認爲你可以讓用戶將(客戶端)鉤子與其他代碼一起拉出來。

+0

我已經通過該鏈接。在這裏,我的要求是我有腳本,提示用戶輸入他/她的意見。現在我需要將這個腳本放在git鉤子腳本中,當我嘗試使用git pull(從一個鉤子腳本)和git push(另一個git鉤子腳本)獲得執行時,它們會詢問我的輸入。我發現客戶端和服務器的鉤子是不同的。如果在工作位置和服務器端更新腳本的更新腳本中添加不同的回顯語句,它將只顯示服務器端,而不是本地回顯。 – user1482764

2

首先,我認爲你不會在這種變化中結交更多的朋友。如果有人輸入git pull,他已經證明他願意聯繫遠程服務器。在我看來,在這種情況下,沒有必要用確認對話框來惹惱用戶。

無論如何,如果你想確定各pullpush,掛鉤不是因爲拉/推掛鉤只在服務器端存在的工具。在客戶端沒有pre-pull,post-pull,pre-pushpost-push掛鉤。所以,我們不得不放棄勾當。

你可以用alias這個pullpush命令將它們包圍在查詢中是否真的應該被拉/推。

查詢很簡單:

echo -n "really push? [y/n] " 
read -s -n 1 really 
if [[ $really == "y" ]]; then 
    # PULL/PUSH HERE 
else 
    echo "aborting" 
fi 

Unfortunately,你不能爲一個別名使用相同的名稱。所以,容易想到

[alias] 
    push = "!echo -n \"really push? [y/n]\";read -s -n 1 really;if [[ $really == \"y\" ]];then git push; else echo \"aborting\"; fi" 

不起作用。

您還有其他兩個選項來實現你想要的:

  • 使用git bord的手段,並呼籲別名safepush/safepull或類似的東西
  • 設置了一個別名在你.bashrcgit pullgit push(參見SU上的this question以建立多字別名其實際上函數
+0

這些解決方案似乎不起作用。我的腳本在預先提交鉤子腳本中工作正常。我們不能做出類似於預拉和預推的類似設置。 – user1482764

+0

$貓。git/hooks/pre-commit #允許我們讀取下面的用戶輸入,將鍵盤分配給鍵盤 exec user1482764

+0

@ user1482764:不,我們無法進行類似的設置,因爲沒有「預拉」和「預推」鉤子。期。 – eckes