【问题标题】:Sync two same project but separate git repos and with different package structure同步两个相同的项目,但单独的 git repos 和不同的包结构
【发布时间】:2020-02-29 10:30:59
【问题描述】:

我需要在两个不同的 git repos 之间进行同步,但两个 repos 具有相同的项目代码/文件和不同的包结构。

当前面临的问题是我需要克隆并推送更改 2 次,是否可以从一次推送中推送到两个存储库

例子

Repo1:com/example1/demo/DemoService.java

Repo2:com/emample2/demo/DemoService.java

注意:两个repos中的文件相同,唯一的变化是包结构)

现在,当我在 com/example1/demo/DemoService.java 中进行更改并从本地推送时,它应该同时推送到 example1 和 exmaple2,这可能吗?如果是,请告诉我需要执行的必要步骤。

【问题讨论】:

    标签: git github git-push github-actions git-repo


    【解决方案1】:

    这不是直接可能的,因为结构的变化意味着历史的变化(树 SHA1 不会相同)

    您可能会考虑推送到中间本地 Repo1 克隆,该克隆将具有本地 post-receive 挂钩。

    那个钩子会:

    • 推送到远程 Repo1
    • 转到本地克隆的 Repo2
    • 复制刚刚修改的文件,并进行本地提交
    • 推送到远程 Repo2

    这样:一次推送,重复文件会自动在两个远程存储库中更新。

    【讨论】:

    • 这是正确的方法,但创建的钩子仅在我的本地权限中,我如何使其在克隆此 repo 并推送更改的其他开发人员中通用
    • @ShashiKiran 出于安全原因,挂钩始终位于其存储库的本地。但是,如果您想共享该过程(挂钩进行实际推送和更新 repo2),那么您需要设置一个所有开发人员都可以访问的本地 Repo1:每个人都会推送到该本地服务器(例如通过 SSH),然后,该本地共享服务器上的 Repo1 可以更新 Repo2 的本地克隆并推送到两个远程存储库。
    • 是否可以使用钩子更改包结构?比如用example2替换example1
    • @ShashiKiran:当然:钩子脚本可以将文件复制到 Repo2 中您需要的任何位置。然后添加、提交和推送。
    【解决方案2】:

    您的问题的另一个解决方案可能是使用 git 子模块 (https://git-scm.com/book/en/v2/Git-Tools-Submodules)。

    您将有一个 git repo 保存您的 java 代码,来自您示例中的 /demo 路径,还有两个其他存储库,每个包名称一个。

    您能否描述一下为什么您需要在两个不同的 repos 和不同的包中使用相同的代码?也许有更好的方法来解决整个问题。

    【讨论】:

    • 这是项目所必需的。让我尝试以一种更简单的方式 - 我有演示项目为示例公司工作。这个示例公司被分成 2 个示例 1 和示例 2(因此需要具有相同代码的不同包结构),暂时两者的功能将保持相同,随着时间的推移,开发可能会单独启动。
    猜你喜欢
    • 1970-01-01
    • 2011-12-01
    • 1970-01-01
    • 2022-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多