- 主题:把 git 布署到一个共享的 nfs 目录里面会怎么样?
我测试了一下,git 仓库位于本地 fs 的和远程文件系统的情况。
首先从 orgin git clone 两个仓库,然后分别往里面复制 linux 内核源代码这样的大型项目后都 commit.
此时,拉出两个命令行,同时执行 git push.
测试发现最终总有一个 git push 不成功。原因是加不上锁。
按说通过 ssh 使用的 git 与 nfs/localfs 没太大差别。所以我估计 git push 到 nfs 目录应该也是没问题的。
【 在 VincentGe 的大作中提到: 】
: 你别放心,你放心我就担心了,数据无价,不要乱来。
: 我建议你按照常见的开发模式来。
: git push是通过引用实现的,它会在远程仓库创建一个引用,然后进行检查,然后进行移动引用。
: ...................
--
FROM 120.36.238.*
【 在 hgoldfish 的大作中提到: 】
: 我测试了一下,git 仓库位于本地 fs 的和远程文件系统的情况。
: 首先从 orgin git clone 两个仓库,然后分别往里面复制 linux 内核源代码这样的大型项目后都 commit.
: 此时,拉出两个命令行,同时执行 git push.
: 测试发现最终总有一个 git push 不成功。原因是加不上锁。
能成功的失败啊?挺好
: 按说通过 ssh 使用的 git 与 nfs/localfs 没太大差别。所以我估计 git push 到 nfs 目录应该也是没问题的。
--
FROM 139.227.19.*
到现在我有些不太理解了
你在同一个仓库两次git push,那必然有一个是不成功。
一个提交之后,另一个提交就会产生冲突。
【 在 hgoldfish 的大作中提到: 】
:
: 我测试了一下,git 仓库位于本地 fs 的和远程文件系统的情况。
:
: 首先从 orgin git clone 两个仓库,然后分别往里面复制 linux 内核源代码这样的大型项目后都 commit.
:
#发自zSMTH@23054RA19C
--
FROM 113.143.104.*
如果 git 没有冲突机制,允许两个 git 进程往同一个仓库里面复制文件和修改文件,那就会成功啊。但是此时数据结构已经被破坏了。
我的测试结果是 git 会检测到冲击。说明 git 有考虑到这种情况并且做了处理。数据结构不会被破坏。这是正确的实现。
但我仍然不能从原理上面确定这件事是不可行的。只是直觉认为布署在 nfs 里面的 git 仓库和布署在 ssh 里面的仓库不应该有差别。
【 在 VincentGe 的大作中提到: 】
: 到现在我有些不太理解了
: 你在同一个仓库两次git push,那必然有一个是不成功。
: 一个提交之后,另一个提交就会产生冲突。
: ...................
--
FROM 120.36.238.*
对git来说,nfs 和本地文件没什么区别。
你需要测试的,也就是开两个 term 同时跑本地 git
【 在 hgoldfish 的大作中提到: 】
: 标 题: Re: 把 git 布署到一个共享的 nfs 目录里面会怎么样?
: 发信站: 水木社区 (Mon Jan 22 21:45:48 2024), 站内
:
: 如果 git 没有冲突机制,允许两个 git 进程往同一个仓库里面复制文件和修改文件,那就会成功啊。但是此时数据结构已经被破坏了。
:
: 我的测试结果是 git 会检测到冲击。说明 git 有考虑到这种情况并且做了处理。数据结构不会被破坏。这是正确的实现。
:
: 但我仍然不能从原理上面确定这件事是不可行的。只是直觉认为布署在 nfs 里面的 git 仓库和布署在 ssh 里面的仓库不应该有差别。
:
: 【 在 VincentGe 的大作中提到: 】
: : 到现在我有些不太理解了
: : 你在同一个仓库两次git push,那必然有一个是不成功。
: : 一个提交之后,另一个提交就会产生冲突。
: : ...................
:
: --
: 灭绝人性啊
:
:
: ※ 来源:·水木社区 mysmth.net·[FROM: 120.36.238.*]
--
FROM 114.246.106.206
我理解你的想法了,对于git来说,他工作在文件系统之上并且不依赖文件锁,因此你无需考虑两者之间的差别。
你的这个方案我我后来想想你在担忧这个问题。
原本你希望两个用户在一个工作区工作,同时提交,但这会引发混乱,于是你又想了一个办法,两个人克隆一个中心仓库,这时,一共有三个仓库。
假设主仓库是bare仓库,那这一切和工作在远程仓库上没有任何区别,两人可以拉取和推送。
但是如果主仓库是non-bare仓库,默认情况下只能拉取,push是不行的。
更细致的讲是你担心git可能依赖文件系统的特性。
【 在 hgoldfish 的大作中提到: 】
:
: 如果 git 没有冲突机制,允许两个 git 进程往同一个仓库里面复制文件和修改文件,那就会成功啊。但是此时数据结构已经被破坏了。
:
: 我的测试结果是 git 会检测到冲击。说明 git 有考虑到这种情况并且做了处理。数据结构不会被破坏。这是正确的实现。
:
#发自zSMTH@23054RA19C
--
FROM 113.143.104.*
是的是的。。
我刚开始是两个人同时在一个工作区里面提交。后来想想这样子好像不太对。
所以后面换成了在挂载的远程目录里面放个 git-demo.git 这个 bare 仓库。
我感觉我这个思路是可行的。因为推送到 ssh://remote/demo.git 和到 nfs://remote/demo.git 应该没有区别才对。我看 ssh 的原理是在远程运行起一个 git 进程,往服务器目录里面写文件。多个人推送,ssh 就会启动多个 git 进程。和我的场景一样。
【 在 VincentGe 的大作中提到: 】
: 我理解你的想法了,对于git来说,他工作在文件系统之上并且不依赖文件锁,因此你无需考虑两者之间的差别。
: 你的这个方案我我后来想想你在担忧这个问题。
: 原本你希望两个用户在一个工作区工作,同时提交,但这会引发混乱,于是你又想了一个办法,两个人克隆一个中心仓库,这时,一共有三个仓库。
: ...................
--
FROM 120.41.147.*
git init --bare
--
FROM 117.136.38.*
你不能稍微简化一点,两个人一个repo,两个工作区么?
git worktree 了解一下
【 在 hgoldfish 的大作中提到: 】
: 假设有两台电脑挂载了同一个服务器 nfs 目录到 ~/gitrepo/
: 我在里面 git init 了一个 demo 仓库。
: 那么两个人就这样子直接使用这个 demo 仓库,直接在里面 git commit 会有什么问题吗?
: ...................
--
FROM 220.249.52.*