实现更新github代码后自动更新 gitee仓库(单向更新/双向更新都可)

官方文档链接 :仓库镜像管理(Gitee<->Github 双向同步) | Gitee 产品文档

功能简介

仓库镜像管理功能用于配置和管理仓库镜像;配置仓库镜像可以实现不同平台之间仓库分支、标签和提交信息的自动同步。

目前该功能限时开放至 2022 年 08 月 31 日,在限时开放期结束前,我们将更新相关产品策略。

Gitee 支持设置两种镜像:

  • Push:用于将 Gitee 的仓库自动镜像到 GitHub 。

    配置此镜像后,当你提交代码到 Gitee 的仓库时,Gitee 会自动向 GitHub 同步仓库。

    Push

  • Pull:用于将 GitHub 的仓库镜像到 Gitee 。

    你可以根据自身需求选择 自动镜像 或 手动镜像;

    自动镜像:当你提交代码到 GitHub 镜像仓库时,Gitee 会自动从 GitHub 同步仓库;

    Pull

    手动镜像:只有你手动点击更新按键时,Gitee 才会从 GitHub 同步仓库。

仓库镜像会同步以下内容:

  • 分支(Branches)
  • 标签(Tags)
  • 提交记录(Commits)

配置仓库镜像可以帮助你管理 GitHub 的仓库,减少维护不同平台仓库的时间成本。

如果你在使用过程中遇到问题,请移步 用户反馈仓库 向我们反馈。

配置仓库镜像

添加 Push 方向的镜像

Push 方向的镜像用于将 Gitee 的仓库自动镜像到 GitHub 。

配置此镜像后,当你提交代码到 Gitee 的仓库时,Gitee 会自动向 GitHub 同步仓库。

你可以通过以下方式添加 Push 方向的镜像:

  1. 进入需要使用镜像功能的仓库,进入「管理」找到「仓库镜像管理」选项,点击「添加镜像」按键;

    如果你还没有绑定 GitHub 帐号,请根据弹窗提示绑定 GitHub 帐号;

    输入图片说明

  2. 添加镜像;

    输入图片说明

    1. 在「镜像方向」中选择 Push 方向;

    2. 在「镜像仓库」下拉列表中选择需要镜像的仓库;

    3. 在「个人令牌」中输入你的 GitHub 私人令牌

      • 私人令牌中必须包含对 repo 的访问授权,否则添加后镜像不可用。
    4. 点击「添加」保存镜像配置。

配置完成后,可以通过以下方式触发镜像操作(Gitee 向 GitHub 同步仓库):

镜像触发的最短间隔时间为 5 分钟。

如果只配置了 Push 方向的镜像,建议将最新的代码提交到 Gitee 仓库;

Gitee 会自动向 GitHub 同步仓库(分支/Branches、标签/Tags、提交记录/Commits)。

添加 Pull 方向的镜像

Pull 方向的镜像用于将 GitHub 的仓库镜像到 Gitee 。

你可以根据自身需求选择 自动镜像 或 手动镜像。

你可以通过以下方式配置 Pull 方向的镜像:

  1. 进入需要使用镜像功能的仓库,进入「管理」找到「仓库镜像管理」选项,点击「添加镜像」按键;

    如果你还没有绑定 GitHub 帐号,请根据弹窗提示绑定 GitHub 帐号;

    输入图片说明

  2. 添加镜像;

    输入图片说明

    1. 在「镜像方向」中选择 Pull 方向;

    2. 在「镜像仓库」下拉列表中选择需要镜像的仓库;

    3. 在「个人令牌」中输入你的 GitHub 私人令牌

      • 私人令牌中必须包含对 repo 的访问授权,否则添加后镜像不可用;
    4. 根据自身需求选择是否勾选「自动从 GitHub 同步仓库」;

      • 勾选后,我们将会在镜像仓库中自动生成 webhook 用于实现自动镜像;
      • 此功能需要你的个人令牌中包含对 admin:repo_hook 的访问授权,否则会添加失败;
    5. 点击「添加」保存镜像配置;

      • 如果添加失败,请根据 如何申请 GitHub 私人令牌 提供的流程重新申请私人令牌;
      • 如果重新申请私人令牌后仍然添加失败,请取消勾选「自动从 GitHub 同步仓库」后点击「添加」保存镜像,并 手动配置 webhook

配置完成后,可以通过以下方式触发镜像操作(Gitee 从 GitHub 同步仓库):

镜像触发的最短间隔时间为 5 分钟。

如果只配置了 Pull 方向的镜像,建议你将最新的代码提交到 GitHub 镜像仓库;

Gitee 会自动从 GitHub 同步仓库(分支/Branches、标签/Tags、提交记录/Commits)。

双向镜像

双向镜像指对同一个 GitHub 仓库同时配置了两种镜像。

配置双向镜像后,你在任意一个平台上提交的代码都将被同步到另一个平台。

Note:双向镜像目前存在代码丢失的风险,请谨慎使用!

为避免代码丢失,使用 双向镜像 功能时,请遵循以下规则

  1. 不要同一时间在 Gitee 仓库和 GitHub 镜像仓库提交代码;

  2. 尽量保证 Gitee 仓库和 GitHub 镜像仓库的提交代码间隔时间大于 30 分钟。

管理仓库镜像

注意事项

使用仓库镜像功能时,请关注以下信息:

  1. 只支持镜像 已绑定 GitHub 帐号授权访问的 仓库;

  2. 更新请求一旦发出,除非 强制停止,否则将无法中断;

  3. 暂时不支持同步 Git-LFS

  4. 同步时间超过 30 分钟视为超时,大型仓库不建议使用镜像方式同步;

  5. 镜像操作会覆盖目标仓库的分支、标签和提交记录;请注意备份并小心使用。

手动更新

无论何时,都可以通过使用「仓库镜像管理」页面中的「更新」按键手动发起更新请求。

更新请求一旦发起将无法手动停止,请谨慎操作。

每一个镜像的最短更新时间间隔为 5 分钟。

强制停止

镜像更新请求发起后,如果连续 5 次镜像失败,镜像操作将被强制停止。

你可以在镜像列表中看到最后一次镜像失败返回的错误信息。

强制停止后,最快可以在 5 分钟后再次发起更新请求。

常见问题

如何申请 GitHub 私人令牌?

GitHub 私人令牌用于授予 Gitee 读写 Github 仓库的权限。

你可以通过以下方式申请 GitHub 私人令牌:

  1. 登录与 Gitee 绑定的 GitHub 帐号;

  2. 通过路径「用户头像」→「Settings」进入「Developer setting」;

  3. 选择「Personal access tokens」选项后点击「Generate new token」;

4.「Note」字段可以随意填写;例如,Gitee_Mirror;

5.「Select scopes」字段请根据你的需求进行勾选;

  - `repo` 字段为必选字段,请您直接勾选;
  - `admin:repo_hook` 字段为可选字段,用于自动生成 webhook;
    > 当您需要 Gitee 自动从 GitHub 同步仓库时,建议您勾选。

  1. 点击「Generate token」生成私人令牌;

  2. 复制私人令牌并妥善保管。

    私人令牌

为什么推送到 GitHub 会失败?

如果你的 GitHub 帐号启用了 Keep my email addresses private(对我的电子邮件地址进行保密)功能,且在 Gitee 上使用你的邮箱 push 代码的话,通过 Gitee 推送将会受到该功能限制。

如何手动配置 Webhook?

Webhook 用于实现 Pull 方向镜像的自动同步。

如果你无法使用我们提供的自动生成 webhook 功能,或者误删了自动生成的 webhook;

你可以通过以下方式手动配置 webhook:

1. 申请 Gitee 的私人令牌

如果你现有的私人令牌中包含了「project」权限,可以跳过此步骤

  1. 通过路径「用户头像」→「设置」找到「私人令牌」选项;

    私人令牌

  2. 根据以下步骤生成一个私人令牌;

    输入图片说明

    -「私人令牌描述」字段可以随意填写;例如,Gitee_Mirror;

    • 勾选 project 权限;
    • 点击「提交」生成私人令牌;
  3. 复制私人令牌并妥善保管。

2. 配置 webhook

  1. 进入 GitHub 的镜像仓库中,进入「Setting」找到「Webhooks」选项,点击「Add webhook」;

  2. 按照如下格式填写「Payload URL」字段;

    https://gitee.com/api/v5/repos/:owner/:repo/remote_mirror/pull?access_token=:personal access token
    

    • :owner:指仓库归属
    • :repo:指仓库名称
    • :personal access token:指你的 Gitee 私人令牌
  3. 选择「Just the push event.」;

    • 需要自定义触发行为时,请选择「Let me select individual events.」后自行定义;
  4. 确保「Active」处于勾选状态后,点击「Add webhook」保存 webhook;

3. Webhook 连通性测试

保存 webhook 后,GitHub 会自动发送测试请求,可以通过查看列表中 icon 判断 webhook 是否正常工作。

  • 正常:

    正常

  • 不正常:

    不正常

    • 遇到此情况,请仔细检查「Payload URL」是否正确后重试。
  • 38
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要使用Java代码更新Github文件,你需要使用Github API来实现。下面是一个简单的Java代码示例,演示如何使用Github API更新文件。 ``` import org.apache.commons.codec.binary.Base64; import org.eclipse.egit.github.core.Commit; import org.eclipse.egit.github.core.Repository; import org.eclipse.egit.github.core.RepositoryContents; import org.eclipse.egit.github.core.service.ContentsService; import org.eclipse.egit.github.core.service.RepositoryService; import org.eclipse.egit.github.core.util.EncodingUtils; import java.io.IOException; import java.nio.charset.StandardCharsets; public class GithubApiExample { private static final String REPO_OWNER = "your_github_username"; private static final String REPO_NAME = "your_github_repository_name"; private static final String FILE_PATH = "path_to_your_file_in_repository"; private static final String ACCESS_TOKEN = "your_github_personal_access_token"; public static void main(String[] args) throws IOException { RepositoryService repositoryService = new RepositoryService(); repositoryService.getClient().setOAuth2Token(ACCESS_TOKEN); Repository repository = repositoryService.getRepository(REPO_OWNER, REPO_NAME); ContentsService contentsService = new ContentsService(); contentsService.getClient().setOAuth2Token(ACCESS_TOKEN); RepositoryContents file = contentsService.getContents(repository, FILE_PATH); String decodedContent = new String(Base64.decodeBase64(file.getContent()), StandardCharsets.UTF_8); String newContent = "Hello, Github API!"; Commit commit = new Commit(); commit.setMessage("Update file via Github API"); String encodedContent = EncodingUtils.toBase64(newContent.getBytes()); contentsService.updateFile(repository, FILE_PATH, commit, encodedContent, file.getSha()); } } ``` 在这个示例中,我们使用了Github API的Java库,Eclipse EGit。这个库提供了对Github API的访问。 首先,我们需要获取访问Github API所需的访问令牌。然后,我们使用RepositoryService和ContentsService连接到Github API。 接下来,我们获取要更新的文件的内容。我们使用Base64编码将内容解码为字符串。 然后,我们创建一个新的字符串,并将其编码为Base64格式。最后,我们使用ContentsService的updateFile方法更新文件。我们提供了文件的路径、提交信息、新的内容和文件的SHA哈希值。 这是一个简单的Java代码示例,演示如何使用Github API更新文件。请注意,这个示例假定你已经安装了Eclipse EGit库,并且已经获取了Github API的访问令牌。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值