- 主题:把 git 布署到一个共享的 nfs 目录里面会怎么样?
第一种不行,第二种问题不大,但是不建议。
推荐你在服务器部署一个gitea。
这是常见的工作流。
【 在 hgoldfish 的大作中提到: 】
:
: 假设有两台电脑挂载了同一个服务器 nfs 目录到 ~/gitrepo/
:
: 我在里面 git init 了一个 demo 仓库。
:
#发自zSMTH@23054RA19C
--
FROM 113.143.104.*
git不依赖文件系统的锁
git的push是原子性的
具体你实验或看git源码
【 在 hgoldfish 的大作中提到: 】
:
: 第二种只要 nfs 支持文件锁就没啥问题对吧?
:
: git push 会不会在仓库里面先创建一个锁文件,如果有另外一个 git push 检测到这个锁文件就禁止另外一个 push? 需要文件系统支持 flock?
:
#发自zSMTH@23054RA19C
--
FROM 113.143.104.*
你别放心,你放心我就担心了,数据无价,不要乱来。
我建议你按照常见的开发模式来。
git push是通过引用实现的,它会在远程仓库创建一个引用,然后进行检查,然后进行移动引用。
【 在 hgoldfish @ [LinuxDev] 的大作中提到: 】
:
: 你这样说我就放心了。
:
: 看源代码要花费比较多的时间。所以我就直接在论坛这边问一下了。看看大家有没有相关的经验。
:
#发自zSMTH@23054RA19C
--
FROM 113.143.104.*
到现在我有些不太理解了
你在同一个仓库两次git push,那必然有一个是不成功。
一个提交之后,另一个提交就会产生冲突。
【 在 hgoldfish 的大作中提到: 】
:
: 我测试了一下,git 仓库位于本地 fs 的和远程文件系统的情况。
:
: 首先从 orgin git clone 两个仓库,然后分别往里面复制 linux 内核源代码这样的大型项目后都 commit.
:
#发自zSMTH@23054RA19C
--
FROM 113.143.104.*
我理解你的想法了,对于git来说,他工作在文件系统之上并且不依赖文件锁,因此你无需考虑两者之间的差别。
你的这个方案我我后来想想你在担忧这个问题。
原本你希望两个用户在一个工作区工作,同时提交,但这会引发混乱,于是你又想了一个办法,两个人克隆一个中心仓库,这时,一共有三个仓库。
假设主仓库是bare仓库,那这一切和工作在远程仓库上没有任何区别,两人可以拉取和推送。
但是如果主仓库是non-bare仓库,默认情况下只能拉取,push是不行的。
更细致的讲是你担心git可能依赖文件系统的特性。
【 在 hgoldfish 的大作中提到: 】
:
: 如果 git 没有冲突机制,允许两个 git 进程往同一个仓库里面复制文件和修改文件,那就会成功啊。但是此时数据结构已经被破坏了。
:
: 我的测试结果是 git 会检测到冲击。说明 git 有考虑到这种情况并且做了处理。数据结构不会被破坏。这是正确的实现。
:
#发自zSMTH@23054RA19C
--
FROM 113.143.104.*