Git pull 无法锁定ref,永久解决?
Git pull unable to lock ref, permanent solution?
我正在处理一个巨大的存储库,我们共有 900 人在处理相同的工作,为我们正在处理的每个 feature/bug/hotfix(我们称之为“自定义分支”)创建一个新分支,并且测试成功后将其删除并合并到主线分支(总计:5),这导致我们出现 unable to lock local ref
.
之类的错误
我们的存储库结构采用以下格式进行暂存:
mainline-level-1
-> mainline-level-2
-> mainline-level-3
-> mainline-level-4
-> mainline-level-5
组织中的每个人都面临 git pull 显示一些与 unable to lock local ref. 相关的错误的问题,我们可以使用并正在解决这个问题一些方便的命令,如 git remote prune origin
OR git gc --prune=now
OR git pull origin mainline-level-1
但是当涉及到我们正在执行 git pull 的服务器时,这些对我们来说是遥不可及的,而且实际上不可能运行 由于某些原因,服务器上的这些命令(包括自动化)。
所以,我开箱即用,看看是否可以删除这些错误。因为我们没有检查服务器端的任何自定义分支,我们所需要的只是那里的主线分支。
我尝试添加 git 配置以仅获取我们存储库的主线分支。所以在添加配置更改后 git 我本地存储库的配置如下所示:
[foo]
repositoryformatversion = 0
filemode = false
bare = false
logallrefupdates = true
symlinks = false
ignorecase = true
[remote "origin"]
url = git@bitbucket.org:gods/foo.git
fetch = +refs/heads/mainline-level-1:refs/remotes/origin/mainline-level-1
fetch = +refs/heads/mainline-level-2:refs/remotes/origin/mainline-level-2
fetch = +refs/heads/mainline-level-3:refs/remotes/origin/mainline-level-3
fetch = +refs/heads/mainline-level-4:refs/remotes/origin/mainline-level-4
fetch = +refs/heads/mainline-level-5:refs/remotes/origin/mainline-level-5
[branch "mainline-level-1"]
remote = origin
merge = refs/heads/mainline-level-1
让我们回到这里的问题
- 是否推荐这样的配置?
- 它会在存储库上产生任何进一步的问题吗?(同时解决 local/remote)
- 是否可以让本地有这样的配置(开发者),这样我们就不会遇到这个问题。
- 我可以配置 git 以这种方式克隆它吗?
注意:目前我正在按照流程在存储库上实现预期状态:
initialize empty repo
->add a remote
->add config changes
->do the git pull
推荐吗?我不知道:这似乎取决于谁在做建议。
它会产生更多问题吗?不会,但也解决不了。
这样的配置可以吗?是的,当然,你自己证明了这一点。
您可以配置 git clone
来执行此操作吗?不准确,不:虽然 git clone --single-branch
接近了,在这样做之后,您可以使用 git remote set-branches --add
添加剩余的四个分支,这样您就有了一个五分支而不是单分支克隆克隆。
不过,您最好的选择是找出为什么您的系统这样做。这通常是在单个存储库上 运行 多个并行 git fetch
操作的标志(不要那样做!)。
听起来您有多个用户共享他们尝试在其中工作的单个 Git 存储库。不要那样做! Git 存储库对每个开发人员都是私有的。
我正在处理一个巨大的存储库,我们共有 900 人在处理相同的工作,为我们正在处理的每个 feature/bug/hotfix(我们称之为“自定义分支”)创建一个新分支,并且测试成功后将其删除并合并到主线分支(总计:5),这导致我们出现 unable to lock local ref
.
我们的存储库结构采用以下格式进行暂存:
mainline-level-1
-> mainline-level-2
-> mainline-level-3
-> mainline-level-4
-> mainline-level-5
组织中的每个人都面临 git pull 显示一些与 unable to lock local ref. 相关的错误的问题,我们可以使用并正在解决这个问题一些方便的命令,如 git remote prune origin
OR git gc --prune=now
OR git pull origin mainline-level-1
但是当涉及到我们正在执行 git pull 的服务器时,这些对我们来说是遥不可及的,而且实际上不可能运行 由于某些原因,服务器上的这些命令(包括自动化)。
所以,我开箱即用,看看是否可以删除这些错误。因为我们没有检查服务器端的任何自定义分支,我们所需要的只是那里的主线分支。
我尝试添加 git 配置以仅获取我们存储库的主线分支。所以在添加配置更改后 git 我本地存储库的配置如下所示:
[foo]
repositoryformatversion = 0
filemode = false
bare = false
logallrefupdates = true
symlinks = false
ignorecase = true
[remote "origin"]
url = git@bitbucket.org:gods/foo.git
fetch = +refs/heads/mainline-level-1:refs/remotes/origin/mainline-level-1
fetch = +refs/heads/mainline-level-2:refs/remotes/origin/mainline-level-2
fetch = +refs/heads/mainline-level-3:refs/remotes/origin/mainline-level-3
fetch = +refs/heads/mainline-level-4:refs/remotes/origin/mainline-level-4
fetch = +refs/heads/mainline-level-5:refs/remotes/origin/mainline-level-5
[branch "mainline-level-1"]
remote = origin
merge = refs/heads/mainline-level-1
让我们回到这里的问题
- 是否推荐这样的配置?
- 它会在存储库上产生任何进一步的问题吗?(同时解决 local/remote)
- 是否可以让本地有这样的配置(开发者),这样我们就不会遇到这个问题。
- 我可以配置 git 以这种方式克隆它吗?
注意:目前我正在按照流程在存储库上实现预期状态:
initialize empty repo
->add a remote
->add config changes
->do the git pull
推荐吗?我不知道:这似乎取决于谁在做建议。
它会产生更多问题吗?不会,但也解决不了。
这样的配置可以吗?是的,当然,你自己证明了这一点。
您可以配置
git clone
来执行此操作吗?不准确,不:虽然git clone --single-branch
接近了,在这样做之后,您可以使用git remote set-branches --add
添加剩余的四个分支,这样您就有了一个五分支而不是单分支克隆克隆。
不过,您最好的选择是找出为什么您的系统这样做。这通常是在单个存储库上 运行 多个并行 git fetch
操作的标志(不要那样做!)。
听起来您有多个用户共享他们尝试在其中工作的单个 Git 存储库。不要那样做! Git 存储库对每个开发人员都是私有的。