问题标签 [git-non-bare-repository]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
git - 为什么它不是提交并且不能从中创建分支?
我需要使用复杂的存储库配置。我有 5 个:
- 机器 1 上的远程中央存储库。
- 我笔记本上的本地存储库(机器 2)。
- 机器 3 上的裸存储库。
- 机器 3 上的存储库。
- 机器 4 上的存储库,我们在其中进行代码审查。
所以,我的理解是它是这样工作的:
- 在我的笔记本电脑(机器 2)上,我从位于机器 1 上的中央存储库中克隆/提取。
- 我将本地存储库推送到机器 3(使用裸存储库作为“中间”)。
现在我在机器 3 上做了一些更改,我想将这些更改推送到机器 4。以下是我需要遵循的说明:
- 在机器 3 上,在您的测试分支中完成所有工作,提交。
- 推送到机器 3 上的裸仓库:git push origin test-branch
- 在您的笔记本电脑上:从 machine-3 存储库中获取新提交:git fetch machine3
- 从机器 3 检查您的分支: git checkout -b test-branch machine-3/test-branch
- 从 machine-4 获取提交:git fetch origin
- git rebase 起源/主
- git push origin HEAD:refs/for/master
第 4 步有问题。我收到以下错误:
添加
当我执行
在我的笔记本电脑(机器 2)上,我得到:
git - Git推送失败:无法将对象迁移到永久存储
我有一个本地存储库,我已将其克隆到同一台机器上的另一个目录。
当我对克隆和提交进行一些更改然后推送时,我收到以下错误消息
我再次强调,我从中进行推送的克隆存储库和目标存储库都是本地的,并且我对两者都有读/写访问权限。
遇到过这篇文章 git 是什么意思,“无法将对象迁移到永久存储”?
我知道我在远程本地存储库上有权限问题,所以我检查了本地远程目录上的文件:.git/objects/pack 确实有一个文件是只读的
但是按照第一个答案评论中的建议在对象文件夹上执行 chmod -R g+w * 并没有帮助,因为在下一次推送时,文件从 rw 更改回 r-
我也试过
git config core.sharedRepository true 就像在这篇文章中一样
但再次推动会产生相同的错误
git - Git clone 防止克隆工作副本(非裸)存储库
如果您克隆 git 工作副本(带有工作树的存储库)更改一些文件,提交并尝试推送,您将收到一条消息:
这对我来说是可以理解和想要的行为。
我想防止意外克隆存储库的工作副本。
如何防止 git clone 克隆工作副本而不是远程裸存储库,并在尝试克隆工作副本时发出错误信号?
如果尝试克隆工作副本而不是裸远程存储库,是否有任何命令行开关会导致 git clone 非零退出状态?
如果不是,那么如何检查存储库位置(url 或 dir 的路径)是否包含裸存储库,以便我可以在克隆之前在 bash 中对其进行测试。
请注意,存储库的工作副本并不一定意味着它是本地的,因为它也可以由远程共享。
在我的情况下,应该只允许 git clone 与 git 裸存储库一起使用,如果用于克隆工作副本,则会发出错误信号。