首页 时政热点 科技头条 智能AI 安全攻防 数码硬件 开发者生态 归档 标签 关于

Google copybara:在存储库之间移动代码

2026-07-01 1 阅读 约8分钟阅读 reconnecting
分享:
字号:
Copybara 用于在存储库之间转换和移动代码的工具。 Copybara 是 Google 内部使用的工具。它在存储库之间转换和移动代码。通常,源代码需要存在于多个存储库中,而 Copybara 允许您在这些存储库之间转换和移动源代码。一个常见的案例是涉及同步维护机密存储库和公共存储库的项目。 Copybara 要求您选择其中一个存储库作为权威存储库,以便始终有一个事实来源。但是,该工具允许对任何存储库做出贡献,并且任何存储库都可以用于削减版本。最常见的用例涉及将代码从一个存储库重复移动到另一个存储库。 Copybara 还可用于将代码一次移动到新存储库。 Copybara 的示例用途包括: 将代码部分从机密存储库导入到公共存储库。将代码从公共存储库导入到机密存储库。将更改从非权威存储库导入到权威存储库。当非权威存储库(例如,公共存储库中的贡献者)中发生更改时,Copybara 会转换该更改并将其移动到权威存储库中的适当位置。任何合并冲突的处理方式都与权威存储库中的过时更改相同。 Copybara 的主要功能之一是它是无状态的,或者更具体地说,它将状态存储在目标存储库中(作为提交消息中的标签)。这允许多个用户(或服务)对相同的配置/存储库使用 Copybara 并获得相同的结果。目前,唯一支持的存储库类型是 Git。 Copybara 还可以从 Mercurial 存储库中读取数据,但该功能仍处于实验阶段。可扩展的架构允许为几乎任何用例添加定制的起点和目的地。未来将添加对其他存储库类型的官方支持。示例核心 . workflow ( name = "default" , origin = git . github_origin ( url = "https://github.com/google/copybara.git" , ref = "master" , ), destination = git .destination ( url = "file:///tmp/foo" , ), # 复制所有内容,但不要删除 README_INTERNAL.txt 文件(如果存在)。destination_files = glob ([ "third_party/copybara/**" ], except = [ "README_INTERNAL.txt" ]), Authoring = Authoring . pass_thru ("默认电子邮件 " ), conversions = [ core .replace ( before = "//third_party/bazel/bashunit" , after = "//another/path:bashunit" , paths = glob ([ "**/BUILD" ])), core . move ( "" , "third_party/copybara" ) ], ) 运行: $ (mkdir /tmp/foo ; cd /tmp/foo ; git init --bare) $ copybara copy.bara.sky Copybara 入门 最简单的开始方法是每周发布“快照”,其中包括预构建的二进制文件。请注意,这些是自动发布的,没有任何手动测试、版本兼容性或正确性保证。从 https://github.com/google/copybara/releases 选择一个版本。从源代码构建要使用未发布版本的copybara,因此您需要从HEAD进行编译。为此,您需要执行以下操作: 安装 JDK 11 。安装巴泽尔。在本地克隆 copybara 源: git clone https://github.com/google/copybara.git Build: bazel build //java/com/google/copybara bazel build //java/com/google/copybara:copybara_deploy.jar 以创建可执行的 uberjar。测试:bazel test //...如果你想确保你没有使用损坏的版本。请注意,某些测试需要安装底层工具(例如 Mercurial、Quilt 等)。如果您的 Pull Request 与这些模块无关,则可以跳过这些测试(而且我们的 CI 无论如何都会运行所有测试)。系统软件包 可以使用适合您系统的软件包管理器来安装这些软件包。 Arch Linux aur/copybara-git 使用 Intellij 和 Bazel 插件 如果您使用 Intellij 和 Bazel 插件,请使用此项目配置: 目录:copybara/integration java/com/google/copybara javatests/com/google/copybarathird_party 目标: //copybara/integration/... //java/com/google/copybara/... //javatests/com/google/copybara/... //third_party/... 注意:配置文件可以存储在任何地方,甚至在本地文件夹中。我们建议使用 VCS(如 git)来存储它们;将它们视为源代码。在 Bazel 中使用预构建的 Copybara 如果使用每周快照版本,请按如下方式安装 Copybara:Copybara 附带版本 65.0 的类文件,因此它必须与 Java Runtime 21 或更高版本一起运行。添加到您的 .bazelrc 文件: run --java_runtime_version=remotejdk_21 使用 http_jar 下载发布工件。在 WORKSPACE 中: load("@bazel_tools //tools/build_defs/repo:http.bzl", "http_jar") 在 MODULE.bazel 中: http_jar = use_repo_rule("@bazel_tools //tools/build_defs/repo:http.bzl", "http_jar") 在 WORKSPACE 或 MODULE.bazel 中,填写 [version] 占位符: http_jar (
这篇文章对您有帮助吗?

订阅66必读

每日精选科技资讯,直达你的邮箱