gpt4 book ai didi

git - merge 多个 git 存储库

转载 作者:IT王子 更新时间:2023-10-29 01:15:20 26 4
gpt4 key购买 nike

假设我有一个看起来像这样的设置

phd/code/
phd/figures/
phd/thesis/

由于历史原因,这些都有自己的 git 存储库。但我想将它们 merge 为一个以简化一些事情。例如,现在我可能会进行两组更改,并且必须做类似的事情

cd phd/code
git commit
cd ../figures
git commit

(现在)只是表演会很好

cd phd
git commit

似乎有几种方法可以使用子模块或从我的子存储库中提取,但这比我正在寻找的要复杂一些。至少,我会很高兴

cd phd
git init
git add [[everything that's already in my other repositories]]

但这看起来不像是一条线。 git 中有什么可以帮助我的吗?

最佳答案

这是我给出的解决方案here :

  1. 首先对您的 phd 目录进行完整备份:我不想为您失去多年的努力负责! ;-)

    $ cp -r phd phd-backup
  2. phd/code的内容移动到phd/code/code,并修复历史,使其看起来一直存在(this使用 git 的 filter-branch 命令):

    $ cd phd/code
    $ git filter-branch --index-filter \
    'git ls-files -s | sed "s#\t#&code/#" |
    GIT_INDEX_FILE=$GIT_INDEX_FILE.new \
    git update-index --index-info &&
    mv $GIT_INDEX_FILE.new $GIT_INDEX_FILE' HEAD
  3. phd/figuresphd/thesis的内容相同(只需将code替换为figuresthesis)。

    现在你的目录结构应该是这样的:

    phd
    |_code
    | |_.git
    | |_code
    | |_(your code...)
    |_figures
    | |_.git
    | |_figures
    | |_(your figures...)
    |_thesis
    |_.git
    |_thesis
    |_(your thesis...)
  4. 然后在根目录中创建一个 git 存储库,将所有内容 pull 入其中并删除旧存储库:

    $ cd phd
    $ git init

    $ git pull code
    $ rm -rf code/code
    $ rm -rf code/.git

    $ git pull figures --allow-unrelated-histories
    $ rm -rf figures/figures
    $ rm -rf figures/.git

    $ git pull thesis --allow-unrelated-histories
    $ rm -rf thesis/thesis
    $ rm -rf thesis/.git

    最后,您现在应该拥有了您想要的东西:

    phd
    |_.git
    |_code
    | |_(your code...)
    |_figures
    | |_(your figures...)
    |_thesis
    |_(your thesis...)

此过程的一个好处是它将保留非版本化文件和目录。

希望这对您有所帮助。


只是一个警告:如果你的 code 目录已经有一个 code 子目录或文件,事情可能会出错(对于 figures当然是 code> 和 thesis)。如果是这种情况,只需在执行整个过程之前重命名该目录或文件即可:

$ cd phd/code
$ git mv code code-repository-migration
$ git commit -m "preparing the code directory for migration"

程序完成后,添加最后一步:

$ cd phd
$ git mv code/code-repository-migration code/code
$ git commit -m "final step for code directory migration"

当然,如果 code 子目录或文件没有版本控制,只需使用 mv 而不是 git mv,而忘记 git 提交s.

关于git - merge 多个 git 存储库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/277029/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com