让我们考虑使用git而不使用守护进程的例子。
所以我们没有git “server”,我们只有中央回购和两个用户的git “clients”。
因此,据我所知,向repo添加新代码的工作将由用户的git程序(由客户端)完成。
如何提供安全的并发推送?
使用中央仓库操作系统文件锁?
或者怎么样?
答案 0 :(得分:3)
针对并发推送的基本保护措施是:
但从技术上讲,并发推送同一个repo的同一分支取决于如何管理git 后端。
这就是a proposed patch from March 2016 "refs backend"中正在改进的内容。它会:
ref: refs/
开头的字符串。例如,您的.git/HEAD
是一个常规文件,其内容为ref: refs/heads/master
。)仍然可以通过并发更新来混淆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