假设我有一个 git 服务器。用户 X 想要添加文件 A、B、C、D、E,然后提交,而用户 Y 想要添加 F、G、H、I、J,然后提交。
如果它们碰巧同时操作,是否有可能git add F, G, H, I, J
在git add A, B, C, D, E
andcommit -m 'user X commit'
过程中运行,使Y添加的文件混入用户X的提交中(尤其是当文件A~E很大并且需要很长时间添加和犯罪)?
如果可能,是否有解决方案?
git add
首先,在输入和 then之间存在执行延迟git commit
。因此,假设git add
“同时”执行,第一个执行 git commit 的用户将提交所有文件,而另一个用户将收到一个错误,大意是没有任何东西可以提交。
这一切都假设两个“用户”在同一个目录上作为同一个“用户”操作。这与真正的 git 工作流程无关,其中每个“用户”都是它自己的用户,并在它自己的通用存储库的克隆版本上进行操作。您提到的问题可能发生在git push
级别上。但是,将在远程存储库上收到“推送”的第一个用户将按预期更新,并且另一个用户将收到错误“推送被拒绝”,因为那时树和“较慢”用户会出现不一致必须将他的更改应用于其他用户的提交。如果保证不会有任何冲突,这将很容易解决。
我建议您阅读:http ://www.danielmiessler.com/study/git/或任何其他 git 教程。
如果您正在谈论许多人可能同时访问的受版本控制的部署,我强烈建议您更改工作流程,以便您使用外部存储库,您可以在其中通过推送发布更改并在常用服务上部署通过git clone
然后git pull
:
user1 local repo git push to --> common repo <-- git clone/pull on common server
user2 local repo git push to ----^