repo sync导致"致命:不是git存储库:' working_dir / .repo / projects / external / ipsec-tools.git'"

时间:2014-11-25 15:41:16

标签: android git android-source

我正在尝试下载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,以便它从头开始,但它总是给出相同的错误。

有什么想法吗?

3 个答案:

答案 0 :(得分:6)

没有必要从头开始sync。 Android是一个从头开始下载的大型存储库,为了节省时间和互联网,可以删除特定的git存储库(通常我只看到1个git目录已损坏)并重新运行同步。

repo将项目存储在

.repo/projects

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

.repo/project-objects

按照“项目”中的链接删除这两个存储库并再次运行同步。 它对我有用。

platform / frameworks / support 的示例:

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

仅同步此项目:

repo sync -j4 platform/frameworks/support

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

答案 1 :(得分:0)

我有一个类似的问题,repo命令将退出并出现相同的错误。

我做了一个临时文件夹,做了

repo init

然后做了

repo sync -j4 [PROJECT NAME]

其中“项目名称”是损坏的git。然后,我将.git目录从.repo / projects文件夹复制到主目录的.repo / projects中,然后再次运行repo sync来完成它。

答案 2 :(得分: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 有用。