repo同步导致“fatal: Not a git repository: 'working_dir/.repo/projects/external/ipsec-tools.git'”错误。

4

我正在尝试下载 Android 源代码,并按照https://source.android.com/source/downloading.html中描述的步骤进行操作。该步骤包括安装 repo 脚本,然后运行以下命令:

$ repo init -u https://android.googlesource.com/platform/manifest
$ repo sync

获取主分支。我还尝试使用-f -j1标志通过错误并仅使用一个核心,正如网上某处建议的那样。此时,我认为已非常接近下载整个内容,但在处理ipsec-tools时,它总是会在最后阶段停止。它总是给出以下输出:

    Fetching project platform/external/ipsec-tools
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100     1  100     1    0     0      3      0 --:--:-- --:--:-- --:--:--     3
100 1690k  100 1690k    0     0  2307k      0 --:--:-- --:--:-- --:--:-- 2307k
fatal: Not a git repository: '/home/sebastian/WORKING_DIR/.repo/projects/external/ipsec-tools.git'
fatal: Not a git repository: '/home/sebastian/WORKING_DIR/.repo/projects/external/ipsec-tools.git'
fatal: Not a git repository: '/home/sebastian/WORKING_DIR/.repo/projects/external/ipsec-tools.git'
Traceback (most recent call last):
  File "/home/sebastian/WORKING_DIR/.repo/repo/main.py", line 500, in <module>
    _Main(sys.argv[1:])
  File "/home/sebastian/WORKING_DIR/.repo/repo/main.py", line 476, in _Main
    result = repo._Run(argv) or 0
  File "/home/sebastian/WORKING_DIR/.repo/repo/main.py", line 155, in _Run
    result = cmd.Execute(copts, cargs)
  File "/home/sebastian/WORKING_DIR/.repo/repo/subcmds/sync.py", line 635, in Execute
    fetched = self._Fetch(to_fetch, opt)
  File "/home/sebastian/WORKING_DIR/.repo/repo/subcmds/sync.py", line 339, in _Fetch
    self._FetchProjectList(**kwargs)
  File "/home/sebastian/WORKING_DIR/.repo/repo/subcmds/sync.py", line 234, in _FetchProjectList
    success = self._FetchHelper(opt, project, *args, **kwargs)
  File "/home/sebastian/WORKING_DIR/.repo/repo/subcmds/sync.py", line 275, in _FetchHelper
    no_tags=opt.no_tags, archive=self.manifest.IsArchive)
  File "/home/sebastian/WORKING_DIR/.repo/repo/project.py", line 1110, in Sync_NetworkHalf
    no_tags=no_tags)):
  File "/home/sebastian/WORKING_DIR/.repo/repo/project.py", line 1845, in _RemoteFetch
    self.bare_git.pack_refs('--all', '--prune')
  File "/home/sebastian/WORKING_DIR/.repo/repo/project.py", line 2483, in runner
    p.stderr))
error.GitError: platform/external/ipsec-tools pack-refs: fatal: Not a git repository: '/home/sebastian/WORKING_DIR/.repo/projects/external/ipsec-tools.git'

由于它说它不是一个git仓库,我有点猜测并在所指示的目录上运行了git init,但这并没有起作用。我还尝试删除整个ipsec-tools.git目录,并再次运行repo sync,以便从头开始,但它总是给出相同的错误。

有任何想法吗?


1
检查您的文件系统,看看是否磁盘空间不足。Repo 基本上会在 .repo/projects 下检出 git 存储库,然后在您的工作目录中创建到 git 存储库内容和该项目的 .git 目录内容的适当路径,并通过符号链接将其指回 .repo/projects 目录下的 git 配置文件。这似乎无法正确地拉取所有内容,可能是由于磁盘空间问题引起的。 - Larry Schiefer
您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - schlow
1
嗯...如果你已经执行了repo init,然后执行了repo sync,但由于磁盘空间不足而失败,然后尝试扩展磁盘并重新运行repo sync,可能会导致git存储库处于奇怪的状态。你可以尝试清除你的工作目录并重新开始。或者,你可以尝试重新运行repo initrepo sync,但我过去使用这种方法的结果非常不一致。 - Larry Schiefer
你是对的。这次从头开始做确实起了作用。感谢你的帮助。 - schlow
repo forall -vc "git init" && repo sync 对我来说有效。 - user2955935
3个回答

10

不必从头开始运行sync。Android是一个庞大的存储库,可以从头部下载,在节省时间和互联网的利益上,人们可以删除特定的git存储库(通常我只看到有1个git目录已经损坏),然后重新运行同步。

repo将项目存储在其中。

.repo/projects

但这些只是指向实际 git 数据的软链接,它们存储在

.repo/project-objects

跟随“项目”中的链接,移除两个存储库,然后再次运行同步操作。对我来说是有效的。

针对平台/框架/支持的示例:

rm -fr .repo/projects/frameworks/support.git/ .repo/project-objects/platform/frameworks/support.git/

仅同步此项目:

repo sync -j4 platform/frameworks/support

[我想将这个作为评论添加,但它不允许我 - 所以我添加为答案]


0

简短回答:移除有问题的代码库/数据:

rm -Rf platform/external/ipsec-tools # from current path
rm -Rf .repo/projects/platform/external/ipsec-tools.git  # soft links 
rm -Rf .repo/project-objects/platform/external/ipsec-tools.git # actual git data

只同步有问题的部分更好:

repo sync platform/external/ipsec-tools

这对我在LineageOS上有效。


-1

我遇到了类似的问题,其中repo命令也会出现相同的错误。

我创建了一个临时文件夹,执行了

repo init

然后执行

repo sync -j4 [PROJECT NAME]

PROJECT NAME 是一个 git 仓库,它出现了损坏。我将 .repo/projects 文件夹中的 .git 目录复制到主目录的 .repo/projects 中,并再次运行 repo sync 完成同步。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接