【问题标题】:Git - how to merge multiple repositories with common files?Git - 如何将多个存储库与公共文件合并?
【发布时间】:2015-02-09 05:49:01
【问题描述】:

所以我的问题是这样的:我有 2 个不同的存储库,我需要创建一个不同的新存储库 - 包含这两个存储库中的文件。但是,存储库共享一些我想手动合并的文件(例如 main.c)...我尝试将存储库与本教程合并:http://blog.caplin.com/2013/09/18/merging-two-git-repositories/,但是我只得到一个 main.c 的“副本”。也许我不明白 git 的工作原理(我对它很陌生),但我真的需要 git 给我两个文件,然后我可以手动更改并制作一个新的 main.c ......我希望我'已经明确了我的问题......我可以制作这些存储库的两个不同的工作副本,复制内容并制作一个新的回购......但是历史会丢失,对吗?

【问题讨论】:

    标签: git github version-control git-merge git-remote


    【解决方案1】:

    使用git add remote - http://git-scm.com/book/en/v2/Git-Basics-Working-with-Remotes 创建一个包含两个遥控器的存储库

    克隆第一个远程以在本地创建初始文件集 - http://git-scm.com/docs/git-clone

    然后使用 git pull [remote2] 从另一个存储库中获取文件 - http://git-scm.com/docs/git-pull

    然后解决所有代码冲突。

    然后,如果需要,为新的 repo 添加第三个远程并将代码推送到那里。

    【讨论】:

    • 我无法克隆远程,因为它说 致命:存储库 'ps3' 不存在。 ps3 是我的第一个遥控器的名称,您希望我克隆它。我通过git pull ps3 master 想到了它,它起作用了。但是,当我尝试git pull ps4 master 时,我得到的是:From *******... * branch master -> FETCH_HEAD * [new branch] master -> p4/master Already up-to-date. 。而且它不是最新的,因为 ps4(我的第二个遥控器)的 main.c 与我的 ps3 不同...
    【解决方案2】:

    您需要选择一个中心点。对于 project_a,这将是默认设置,您的代码存储库位于 https://path.toyourproject.com/p/project_a。首先检查它并将其所有内容移动到一个子目录中:

    $ git clone https://path.toyourproject.com/p/project_a
    $ cd project_a
    $ mkdir project_a-cli
    $ git mv * project_a-cli
    $ git commit -a -m "Move."
    

    然后您就可以开始处理辅助存储库的合并了。例如https://path.toyourproject.com/p/project.testers

    第一步是将二级存储库拉入您的中心点

    $ git remote add origin-testers https://code.google.com/p/project.testers
    $ git fetch origin-testers
    

    将其签出到一个临时分支并将其所有内容移动到一个子目录中

    $ git branch merge-testers origin-testers/master
    $ mkdir project.testers-testers
    $ git mv * project.testers-testers
    $ git commit -a -m "Move."
    

    将两个存储库合并为一个

    $ git checkout master
    $ git merge merge-testers
    

    清理

    $ git branch -d merge-testers
    $ git remote remove origin-testers
    

    之后手动解决冲突。你可能想为 Git 安装一个可视化差异工具。

    【讨论】:

    • 进入 project_a 目录并创建一个新文件夹后,当我尝试执行 git mv * project_a-cli 时,我收到一条消息说 fatal: cannot move directory into its own, source=project_a-cli, destination= project_a-cli/project_a-cli。所以我通过git mv *.c project_a-cli 移动了文件然后它工作了。在获取第二个 repo 并执行 git mv * project.testers-testers 之后发生了同样的致命错误。所以我尝试做和以前一样的事情:git mv *.c project.testers-testers。然而,我得到另一个错误:fatal: bad source, source=*.c, destination=project.piask4-piask4/*.c
    • 所以在获取第二个存储库后,我似乎没有从中获得任何文件......我试图忽略它,检查 master,然后尝试合并合并测试器......但显然它说它已经是最新的了。
    猜你喜欢
    • 2022-12-19
    • 2010-09-21
    • 1970-01-01
    • 1970-01-01
    • 2010-10-11
    • 2019-08-30
    • 1970-01-01
    • 2015-04-06
    • 2017-02-03
    相关资源
    最近更新 更多