我的git仓库中有一个预推脚本运行测试。如果测试通过,那么继续推进。如果测试失败,则中止推送。
脚本运行一段时间,直到测试开始超过3分钟。 stdout显示"连接到bitbucket由远程主机关闭"在测试输出的中间。然后所有的测试都通过了,推动实际上并没有通过。
这是推送前脚本
btn3GOon.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
try {
setMobileDataEnabled(null, false);
} catch(Exception e){
e.printStackTrace();
}
}
});
}
private void setMobileDataEnabled(Context context, boolean enabled) throws Exception {
final ConnectivityManager conman = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
final Class conmanClass = Class.forName(conman.getClass().getName());
final Field iConnectivityManagerField = conmanClass.getDeclaredField("mService");
iConnectivityManagerField.setAccessible(true);
final Object iConnectivityManager = iConnectivityManagerField.get(conman);
final Class iConnectivityManagerClass = Class.forName(iConnectivityManager.getClass().getName());
final Method setMobileDataEnabledMethod = iConnectivityManagerClass.getDeclaredMethod("setMobileDataEnabled", Boolean.TYPE);
setMobileDataEnabledMethod.setAccessible(true);
setMobileDataEnabledMethod.invoke(iConnectivityManager, enabled);
}
答案 0 :(得分:2)
答案应该说明为什么git试图到达Gitlab或Bitbucket或其他任何东西(在我的情况下为Gitlab),即使预推脚本尚未完成
commit ec55559, Jan. 2013, Git v1.8.2-rc0引入了pre-push
钩子
它是as/pre-push-hook
补丁的一部分:
请参见commit 87c86dd的commit ec55559,commit 5a7da2d,Aaron Schrab (aschrab
)(2013年1月13日)。
(由Junio C Hamano -- gitster
--在commit bb9a696中合并,2013年1月24日)
commit af65f68对Clemens Buchacher (drizzd
)进行了唯一的其他修改,Jeff King -- peff
--忽略了SIGPIPE
,这意味着忽略了它
标准输入流。
(由commit 40fdcc5在documentation does include中合并,2015年12月1日)
有关钩子标准的信息,请参见 用以下形式的行输入:
<local ref> SP <local sha1> SP <remote ref> SP <remote sha1> LF
例如,如果运行了命令+
git push origin master:foreign
+, 钩子将收到如下一行:refs/heads/master 67890 refs/heads/foreign 12345
尽管将提供完整的40个字符的SHA1。
- 如果外国裁判还不存在,则
<remote SHA1>
将为400
。- 如果要删除参考,则
<local ref>
将作为(delete)
提供,而<local SHA1>
将为400
。
答案 1 :(得分:1)
我最终在成功案例中调用了git push --no-verify
。所以它有效地推了两次。
#!/bin/sh
DIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )
# This script runs tests before any push to the MASTER branch and fails
current_branch=$(git symbolic-ref HEAD | sed -e 's,.*/\(.*\),\1,')
echo "Current branch: "$current_branch
if [ $current_branch = "master" ]
then
echo "Pushing to MASTER branch requires tests to pass..."
./run.sh test
if [ $? = 0 ]
then
# workaround to guarantee my push goes through even if the first attempt times out
git push --no-verify
exit 0
else
echo "***ERROR> Failed to pass tests! Get tests to pass and then try again..."
exit 1
fi
else
echo "Skipping tests since we're not pushing to MASTER..."
fi
答案 2 :(得分:0)
您检查了bitbucket.properties
吗?也许你会遇到一些超时,例如:process.timeout.execution
或plugin.bitbucket-scm-git.backend.timeout.idle
。可能需要快速检查是否有一些设置为180秒的超时。 Here您可以找到有关可用属性的更多详细信息。