2012-06-26 633 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