使用 capistrano 在服务器上部署时如何修复“无法锁定引用”错误?

psh*_*hnn 0 git capistrano

我试图将修补程序部署到我的临时服务器 (DigitalOcean),但收到“无法锁定引用”错误。我之前偶然发现了这个错误。我有一个分支“hotfix”,然后创建了“hotfix/some-hotfix”分支,当我尝试将其推送到原点时,我收到了错误。我通过删除存储库(BitBucket)中的分支“hotfix”来修复它。但现在我在临时服务器上部署时得到了它。

堆栈跟踪:

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
Run Code Online (Sandbox Code Playgroud)

我尝试跑步,git remote prune origin但没有帮助。我在这里没有任何想法

tor*_*rek 5

虽然分支名称大多只是 strings\xe2\x80\x94sohotfixhotfix/my-hotfix-branch-name很明显,即两个不同的名称\xe2\x80\x94Git 的一部分坚持(出于好的和坏的原因)将它们视为目录和文件名组件。

\n\n

(注意:如果您使用的是 Windows,您可以在心里用 代替/\\或者,您只需意识到它a/b在 Windows 上的效果与a\\b几乎所有用途一样好。)

\n\n

如果您有一个名为 的文件README,您的操作系统将不允许您创建另一个名为 的文件README/TOO。也就是说,实体槽README被“文件实体”占用。您必须首先删除或重命名README,然后创建一个名为 的目录(或文件夹,如果您喜欢该术语)README。在此目录(或文件夹)内,您现在可以创建更多文件,或将原始README文件移动到该目录中。

\n\n

Git对分支名称和远程跟踪名称施加了完全相同的限制。如果存在名为 的现有分支,hotfix则无法创建名为 的分支hotfix/my-hotfix-branch-name。您通过首先删除hotfix. 您必须在您打算使用的每个其他 Git 存储库中执行相同的操作:如果它有hotfix,请将其删除。然后您可以创建其他 Git 存储库hotfix/my-hotfix-branch-name

\n\n

看起来您的登台服务器hotfix中有一个分支。您可能必须直接登录到登台服务器,或者您可以使用 agit push --delete向其发送删除请求。无论哪种方式,你都必须得到删除该分支名称。在您自己的存储库上完成的操作没有帮助,因为每个存储库都是独立的。

\n\n

当问题发生在本地存储库中,但由于远程跟踪名称(如 )时origin/dir/file,运行git fetch -p origingit remote prune origin应该可以解决问题。-p\xe2\x80\x94的选项(可以fetch拼写为--prune\xe2\x80\x94)和告诉 Git删除prune远程跟踪名称的子命令,例如,它的存在是因为服务器有(这里强调过去时)一个分支命名为,但从那时起,有人删除了该分支。你的远程跟踪名称是你的 Git 记住你上次与他们交谈时他们的分支是什么的方式。所以他们一个分支,但现在他们没有了;现在他们有一个分支机构。您必须让 Git 删除您的Git,然后才能创建git remoteorigin/dirdirdirdir/fileorigin/dirorigin/dir/file远程跟踪名称。

\n