git - 使用 capistrano 在服务器上部署时如何解决“无法锁定 ref”错误?
问题描述
我试图将修补程序部署到我的登台服务器(DigitalOcean),但出现“无法锁定参考”错误。我之前偶然发现了这个错误。我有一个分支'hotfix',然后我创建了'hotfix/some-hotfix'分支,当我试图将它推送到原点时,我得到了错误。我通过删除我的存储库(BitBucket)中的分支“修补程序”来修复它。但是现在我在登台服务器上部署时得到了它。
堆栈跟踪:
SSHKit::Command::Failed: git exit status: 1
git stdout: Fetching origin
error: cannot lock ref 'refs/heads/hotfix/my-hotfix-branch-name': 'refs/heads/hotfix' exists; cannot create 'refs/heads/hotfix/my-hotfix-branch-name'
From bitbucket.org:username/repo-name
! [new branch] hotfix/my-hotfix-branch-name -> hotfix/my-hotfix-branch-name (unable to update local ref)
error: some local refs could not be updated; try running
'git remote prune origin' to remove any old, conflicting branches
error: Could not fetch origin
git stderr: Nothing written
我尝试跑步git remote prune origin
,但没有帮助。我在这里没有想法
解决方案
虽然分支名称大多只是字符串——所以hotfix
并且hotfix/my-hotfix-branch-name
只是显而易见的,即两个不同的名称——Git 的一部分坚持(出于好的和坏的原因)将它们视为目录和文件名组件。
(注意:如果你在 Windows 上,你可以在心里/
用\
here 代替。或者,只要意识到它a/b
在 Windows 上的效果与a\b
几乎在所有用途上一样好。)
如果您有一个名为的文件README
,您的操作系统将不允许您创建另一个名为README/TOO
. 也就是说,实体槽README
被“文件实体”占用。您必须首先删除或重命名README
,然后创建一个名为 的目录(或文件夹,如果您更喜欢该术语)README
。在此目录(或文件夹)内,您现在可以创建更多文件,或将原始README
文件移动到该目录中。
Git 对分支名称和远程跟踪名称施加了完全相同的限制。如果存在一个名为的现有分支hotfix
,则无法创建一个名为hotfix/my-hotfix-branch-name
. 您通过首先删除hotfix
. 您必须在您打算使用的每个其他 Git 存储库中执行相同的操作:如果它有hotfix
,则删除它。然后你可以让其他 Git 存储库创建hotfix/my-hotfix-branch-name
.
看起来您的登台服务器中有一个hotfix
分支。您可能必须直接登录到您的登台服务器,或者您可以使用 agit push --delete
向其发送删除请求。无论哪种方式,您都必须让该Git 删除该分支名称。在您自己的存储库上完成的操作没有帮助,因为每个存储库都是独立的。
当问题发生在本地存储库中时,但由于远程跟踪名称,例如origin/dir/file
,运行git fetch -p origin
或git remote prune origin
应该解决问题。选项——-p
可以fetch
拼写--prune
—— 和prune
子命令git remote
告诉你的 Git删除远程跟踪名称,例如origin/dir
,因为服务器有(这里强调过去时)一个名为 的分支dir
,但从那时起,有人删除了那个分支。您的远程跟踪名称是您的 Git 记住您上次与他们交谈时他们的分支是什么的方式。所以他们有一个dir
分支,但他们不再有一个;现在他们有一个dir/file
分支。你必须让你的 Git 删除你的origin/dir
在您的 Git 可以创建origin/dir/file
远程跟踪名称之前。
推荐阅读
- c# - 无法删除此列,因为它是表达式的一部分
- c# - 缩小 Xamarin.Form 实施的滞后
- javascript - 什么相当于打字稿/javascript中的android输入/输出流
- mysql - MySQL BIGINT UNSIGNED 值超出范围
- c# - 如何更改 ASP.NET Core Web API 响应的响应头字符集?
- android - Android Pie:信号 11 (SIGSEGV),代码 1 (SEGV_MAPERR) android::Theme::ApplyStyle(unsigned int, bool)
- angular - Angular 7 绑定下拉菜单
- mysql - 如何更改 wordpress 搜索栏中的搜索操作?
- java - 错误:java.io.NotSerializableException:groovy.util.slurpersupport.Attributes
- azure - Azure ARM 模板中的“Microsoft.Resources/deployments”能否依赖另一个“Microsoft.Resources/deployments”?