GIT:如何实现安全的并发推送?

时间:2016-03-13 08:29:22

标签: git concurrency

让我们考虑使用git而不使用守护进程的例子。

所以我们没有git “server”,我们只有中央回购和两个用户的git “clients”

因此,据我所知,向repo添加新代码的工作将由用户的git程序(由客户端)完成。

如何提供安全的并发推送? 使用中央仓库操作系统文件锁?
或者怎么样?

2 个答案:

答案 0 :(得分:3)

针对并发推送的基本保护措施是:

但从技术上讲,并发推送同一个repo的同一分支取决于如何管理git 后端
这就是a proposed patch from March 2016 "refs backend"中正在改进的内容。它会:

  

仍然可以通过并发更新来混淆git,因为   在锁定下不会发生符号引用的分裂。

     

因此,在此操作过程中,一个符号引用可以替换为普通引用,这将导致reflog不连续和错过old-ref检查。

该补丁将提高真正的并发更新可靠性。

答案 1 :(得分:0)

Git在服务器上没有锁定机制。

您可以使用git hooks强制执行某些规则和政策。

在钩子中,您可以阻止开发人员推送代码(锁定分支),以限制和阻止 force push 将覆盖您之前的历史记录。

摘要

Git没有像其他SCM那样的锁定机制。相反,git使用 hooks ,它基本上是您可以执行的任何语言的脚本,并且您可以执行任何所需的操作。

实施例

取自this article,这是一个示例代码:

    #!/斌/庆典

protected_branch='master'  
current_branch=$(git symbolic-ref HEAD | sed -e 's,.*/\(.*\),\1,')

if [ $protected_branch = $current_branch ]  
then  
    read -p "You're about to push master, is that what you intended? [y|n] " -n 1 -r < /dev/tty
    echo
        if echo $REPLY | grep -E '^[Yy]$' > /dev/null
        then
            exit 0 # push will execute
        fi
        exit 1 # push will not execute
else  
    exit 0 # push will execute
fi