我正在尝试使用,git fetch --all但它在获取某个存储库时给了我错误.
错误:'.git/logs/refs/remotes/tpickel/RS'下仍有日志
和
![新分支] RS - > tpickel/RS(无法更新本地参考)
出了什么问题以及如何解决?
tor*_*rek 17
显然曾经有过tpickel/RS/foo(某些名字foo).
你的Git记录了有关的信息.git/logs/refs/remotes/tpickel/RS/foo.现在你的Git正在尝试创建一个名为的文件.git/logs/refs/remotes/tpickel/RS,它将记录有关新分支的信息tpickel/RS.它不能这样做,因为有一个目录,.git/logs/refs/remotes/tpickel/RS顺便说一下.在路上目录包含一些文件(foo或其他名称,上面没有任何内容可以显示实际名称),这就是你的Git保留reflog的方式tpickel/RS/foo.
现在远程分支tpickel/RS已经消失,你的Git需要删除它们refs/remotes/tpickel/RS/foo及其reflog文件.理想情况下,在尝试创建及其reflog 之前,git fetch --prune tpickel将同时为您完成这两个任务,这是由于挥之不去而失败的原因.tpickel/RStpickel/RS/foo
如果--prune有效,你就完成了.如果没有,您将不得不进入.git/logs/refs/remotes/tpickel/并删除所有RS和RS/*条目,或重命名它们以使它们不受影响.(如果你想保存这些,尽管远程tpickel删除了分支,移动它们而不是删除它们,并且不要git fetch --prune删除它们.你可能不想保存它们.)
--prune意思当您运行(例如)时,Git会联系named 并从中获取所有引用的列表.您可以随时通过运行来自己查看此列表:这会调用相同的开始,但在获取列表后停止,而不是继续执行获取.git fetch remotegit fetch tpickelremotegit ls-remote remote
假设(正常的默认情况),Git被指示将所有分支引用复制到远程跟踪分支.在这个特定的例子中,这意味着要复制refs/heads/master到refs/remotes/tpickel/master例如.这种复制通常是附加的:如果远程tpickel有分支master,develop今天,明天他们添加feature,你今天将有两个远程跟踪分支,你明天会在你拿到它们时添加一个新分支feature.但是,在某些时候,他们可能会移除一个分支.如果他们feature在您还在使用时删除refs/remotes/tpickel/feature怎么办?
Git对这个难题的回答是默认永远保留任何复制的引用.正如您刚刚看到的,在删除旧分支后,这有时会妨碍新分支,因此这种解决方案并不完美.添加的内容--prune是获取完整列表,将其与您的远程跟踪分支集进行比较,并从本地存储库中删除任何远程跟踪分支,该分支在远程上没有相应的分支.也就是说,仅仅因为我们将它们 复制refs/heads/develop到我们的 refs/remotes/tpickel/develop昨天,并不意味着我们应该保留 refs/remotes/tpickel/develop今天,如果它们 refs/heads/develop已经消失了.因此,如果您指定--prune,Git会查找此类事件并删除任何陈旧的远程跟踪分支.
这段代码已经存在了一段时间(我认为是1.7左右).Git版本1.8.5添加了两个配置项:fetch.prune和(例如).如果设置为,总是修剪; 如果特定遥控器的配置设置为,则修剪特定的遥控器.remote.remote.pruneremote.tpickel.prunefetch.prunetruegit fetchtruegit fetch
(代码在Git 2.0.0版本中有所改进,以处理潜在的模糊映射.这包括多个上游引用可能映射到相同远程跟踪引用的情况.通过正常设置,这种情况永远不会发生:它只能发生如果您fetch为某个命名的遥控器组成自己的条目.)
| 归档时间: |
|
| 查看次数: |
3629 次 |
| 最近记录: |