Yocto 是否可以使用android repo工具将文件从一个存储库替换到另一个存储库?

Yocto 是否可以使用android repo工具将文件从一个存储库替换到另一个存储库?,yocto,repo,Yocto,Repo,我正在使用来构建一个Yocto项目,使用的存储库是a,B,Yocto…,我需要将文件从a替换为B,结构如下: A/MyFile.sh B/TheFile.sh yocto/Some_dirs_and_files <?xml version="1.0" encoding="UTF-8"?> <manifest> <remote fetch="mygitrepo" name="origin"/> <default remote="origin"

我正在使用来构建一个Yocto项目,使用的存储库是a,B,Yocto…,我需要将文件从a替换为B,结构如下:

A/MyFile.sh

B/TheFile.sh

yocto/Some_dirs_and_files
<?xml version="1.0" encoding="UTF-8"?>
<manifest>
  <remote fetch="mygitrepo" name="origin"/>
  <default remote="origin"/>
  <project name="yocto" revision="myrevision"/>
  <project name="meta-openembedded" path="yocto/meta-openembedded" revision="myrevision"/>
  <project name="B" path="yocto/B" revision="myrevision"/>
  <project name="C" path="yocto/meta-swi-extras" revision="myrevision"/>
  <project name="poky" path="yocto/poky" revision="myrevision"/>
  <project name="A" path="yocto/custom-builds" revision="myrevision">
    <copyfile src="MyFile.sh" dest="yocto/B/TheFile.sh"/>
  </project>
</manifest>
因此,我使用的copyfile如下所示:

A/MyFile.sh

B/TheFile.sh

yocto/Some_dirs_and_files
<?xml version="1.0" encoding="UTF-8"?>
<manifest>
  <remote fetch="mygitrepo" name="origin"/>
  <default remote="origin"/>
  <project name="yocto" revision="myrevision"/>
  <project name="meta-openembedded" path="yocto/meta-openembedded" revision="myrevision"/>
  <project name="B" path="yocto/B" revision="myrevision"/>
  <project name="C" path="yocto/meta-swi-extras" revision="myrevision"/>
  <project name="poky" path="yocto/poky" revision="myrevision"/>
  <project name="A" path="yocto/custom-builds" revision="myrevision">
    <copyfile src="MyFile.sh" dest="yocto/B/TheFile.sh"/>
  </project>
</manifest>


该文件已成功复制,但如果我将名称设置为要替换的文件,则该文件不会被替换。

看来repo现在允许通过
覆盖该文件

回购协议

类_复制文件(对象): 定义初始化(self、src、dest、abssrc、absdest): self.src=src self.dest=dest self.abs\u src=abssrc self.abs\u dest=absdest def_副本(自身): src=self.abs\u src dest=self.abs\u dest #如果文件不存在或已过期,请复制该文件 如果操作系统路径不存在(dest)或文件cmp.cmp不存在(src,dest):※ ※行显示进行文件复制的条件。

图片下方的代码

if not os.path.exists(dest) or not filecmp.cmp(src, dest):
  try:
    # remove existing file first, since it might be read-only
    if os.path.exists(dest):
      platform_utils.remove(dest)
    else:
      dest_dir = os.path.dirname(dest)
      if not platform_utils.isdir(dest_dir):
        os.makedirs(dest_dir)
    shutil.copy(src, dest)
    # make the file read-only
    mode = os.stat(dest)[stat.ST_MODE]
    mode = mode & ~(stat.S_IWUSR | stat.S_IWGRP | stat.S_IWOTH)
    os.chmod(dest, mode)
这样它就可以取代…

这个还开着吗? 我碰巧遇到了同样的问题,想用
repository1
中的文件覆盖
repository2
中的文件,
repository2
中的
myfile
替换为
repository1
中的
myfile
。我使用的是yocto发行版(有几个层,作为git存储库)。 但它没有起作用。 将
myfile
repository1
复制为
myfile2
repository2
(另一个名称)起作用

我发现,多次运行repoinit/sync命令后,并没有按照相同的顺序填充repo

所以基本上我的
做了当
repository1
被填充时应该做的事情,但这发生在
repository2
被填充之前(即使它们在清单文件中的顺序正确)。而
repository2
只是带来了自己的
myfile
,覆盖了
repository1
复制的文件

我的超级解决方案是使用两个
标签:一个在
repository1
中,将
myfile
作为
myfile2
复制到
repository2
,另一个在
repository2
中,将
myfile2
作为
myfile
复制

您必须确保
repository1
始终在
repository2
之前填充。
这一切都很奇怪,因为回购协议不能保证回购协议的填充顺序。

看起来您试图以正确的方式进行操作。I为
copyfile
添加任何附加选项。因此,在我看来,要找到答案,你应该深入研究回购协议的源代码。一般来说,我会用回购协议来解决这类问题。您可以尝试使用符号链接
linkfile
if not os.path.exists(dest) or not filecmp.cmp(src, dest):
  try:
    # remove existing file first, since it might be read-only
    if os.path.exists(dest):
      platform_utils.remove(dest)
    else:
      dest_dir = os.path.dirname(dest)
      if not platform_utils.isdir(dest_dir):
        os.makedirs(dest_dir)
    shutil.copy(src, dest)
    # make the file read-only
    mode = os.stat(dest)[stat.ST_MODE]
    mode = mode & ~(stat.S_IWUSR | stat.S_IWGRP | stat.S_IWOTH)
    os.chmod(dest, mode)