如果有任何提交,是否可以避免将分支“git push”到 REMOTES - ORIGIN?
Is it possible to avoid to `git push` a branch to REMOTES - ORIGIN if any commits was done?
我需要一个钩子来检查 git push
操作。
如果创建了一个全新的分支并且它与主分支相同,我想要一个钩子来防止将其推送到远程源。
一旦完成对该分支的第一次提交,就可以推送到原点。
基本上我想避免这种情况
$ (master) git checkout -b ticket-abc master
$ (ticket-abc) git push origin ticket-abc
如果没有与这个新分支相关的提交,我想阻止第二行。有没有办法用 git 钩子来管理这个?
非常感谢
挂钩pre-push
可以采用
#!/bin/bash
master_sha=$(git rev-parse refs/heads/master)
while read local_ref local_sha remote_ref remote_sha;do
if [[ "${local_sha}" = "${master_sha}" ]];then
echo error: ${local_ref} points at the same commit with master
echo error: push failed
exit 1
fi
done
exit 0
但我有点担心本地 master
的稳定性。如果碰巧不小心被更新了,钩子无法检测到它的变化,因此不会像预期的那样推送失败。
我会选择 update
服务器端挂钩:
The hook executes once for each ref to be updated, and takes three parameters:
- the name of the ref being updated,
- the old object name stored in the ref,
- and the new object name to be stored in the ref.
然后我会做这样的事情:
#!/bin/sh
refname=""
oldrev=""
newrev=""
master=$(git rev-parse refs/heads/master)
if [ "$newrev" = "$master" ]; then
echo "Rejected: $refname has no new commits compared to master" >&2
exit 1
fi
exit 0
这里我们只是简单地将被推送的分支 (refname
) 引用的提交 (newrev
) 的 SHA-1 与 [= 引用的提交的 SHA-1 进行比较14=]。如果它们相等,我们将以错误代码退出,从而阻止在服务器上创建 特定分支 。
Just before updating the ref on the remote repository, the update hook
is invoked. Its exit status determines the success or failure of the
ref update.
我需要一个钩子来检查 git push
操作。
如果创建了一个全新的分支并且它与主分支相同,我想要一个钩子来防止将其推送到远程源。 一旦完成对该分支的第一次提交,就可以推送到原点。
基本上我想避免这种情况
$ (master) git checkout -b ticket-abc master
$ (ticket-abc) git push origin ticket-abc
如果没有与这个新分支相关的提交,我想阻止第二行。有没有办法用 git 钩子来管理这个?
非常感谢
挂钩pre-push
可以采用
#!/bin/bash
master_sha=$(git rev-parse refs/heads/master)
while read local_ref local_sha remote_ref remote_sha;do
if [[ "${local_sha}" = "${master_sha}" ]];then
echo error: ${local_ref} points at the same commit with master
echo error: push failed
exit 1
fi
done
exit 0
但我有点担心本地 master
的稳定性。如果碰巧不小心被更新了,钩子无法检测到它的变化,因此不会像预期的那样推送失败。
我会选择 update
服务器端挂钩:
The hook executes once for each ref to be updated, and takes three parameters:
- the name of the ref being updated,
- the old object name stored in the ref,
- and the new object name to be stored in the ref.
然后我会做这样的事情:
#!/bin/sh
refname=""
oldrev=""
newrev=""
master=$(git rev-parse refs/heads/master)
if [ "$newrev" = "$master" ]; then
echo "Rejected: $refname has no new commits compared to master" >&2
exit 1
fi
exit 0
这里我们只是简单地将被推送的分支 (refname
) 引用的提交 (newrev
) 的 SHA-1 与 [= 引用的提交的 SHA-1 进行比较14=]。如果它们相等,我们将以错误代码退出,从而阻止在服务器上创建 特定分支 。
Just before updating the ref on the remote repository, the update hook is invoked. Its exit status determines the success or failure of the ref update.