Git 将两个回购协议的内容合并到另一个回购协议内的单个目录中

Git 将两个回购协议的内容合并到另一个回购协议内的单个目录中,git,Git,我需要将两个repo的内容从“modA”和“modB”放到repo main中的单个目录“mods”中 主要 --mods ------莫达菲尔斯 -------模型文件 git没有直接的方法来实现这一点,所以我创建了第三个回购协议,加入这些回购协议。 这些mods回购协议的内容保证不会相互冲突。所以不必担心冲突 一个示例测试用例 for repo in main modA modB ; do git init $repo echo "test $repo&qu

我需要将两个repo的内容从“modA”和“modB”放到repo main中的单个目录“mods”中

主要

--mods

------莫达菲尔斯

-------模型文件

git没有直接的方法来实现这一点,所以我创建了第三个回购协议,加入这些回购协议。 这些mods回购协议的内容保证不会相互冲突。所以不必担心冲突

一个示例测试用例

    for repo in main modA modB ; do
    git init $repo
    echo "test $repo" > "$repo/test$repo"
    cd $repo
    git add "test$repo"
    git config user.name "$repo test"
    git config user.email "$repo@test.test"
    git commit -m 'Initial commit'
    cd ..
    done
    
现在来建立融合回购协议

    git init fusion
    cd fusion
    git remote add modA ../modA/.git
    git remote add modB ../modB/.git
    git config user.name "fusion test"
    git config user.email "fusion@test.test"
    git fetch --all
    git checkout -b modB_master modB/master
    git checkout -b modA_master modA/master
    git checkout -b merge_master
    git merge modB_master -m "Fuse modA and modB"
    ls
现在的问题是将这种融合式回购协议添加到主回购协议中。如果'modA'或'modB'更新,我可以删除'fusion'的'merge_master'分支并重新创建它

我不在乎合并的历史。我只想加入这些回购协议。我也不需要对“融合”或“主”回购进行更改。 在子树中,我将“融合”回购添加到“主”回购。但每当我更改“merge_master”时,它都会得到强制更新,并且所有提交都会显示在“main”repo中

如何在不污染主回购协议的情况下将融合回购协议添加到主回购协议。我应该改用子模块吗?此外,mods回购协议也会频繁更新。(将自动创建合并主控形状)。
或者有更好的方法吗?

为此,您可以使用
子模块

子模块是项目内部的一个项目。子模块的好处是,它允许您通过共享相同的文件夹并将它们存储在同一根目录下,来使用模块的共享资源



子树
另一个选择是使用子树。与子模块非常相似,但内容在根项目中管理,而不是作为独立项目管理


看来我的问题不在于合并、子树或子模块

是用嗯。。git本身


我不想用子回购的不必要的提交、符号链接或其污染我的主回购

我想管理我的东西的某些部分,这些部分应该位于一个目录中,但却位于不同的存储库中

我希望跟踪他们的历史,但这与我的主要回购协议无关

这不是git处理事情的方式。
即使存储库可能是分开的,它仍然是连接的。
如果我不想要那种联系,我就得对git说‘忽略它’

所以我只想为目录添加一个
.gitignore
(这不能在目录中,因为目录需要是空的)。。把我的融合回购协议放在那个目录里

然后,这种融合式回购可以直接从次级回购的远端提取变化,并合并甚至重新设定基准


但要推动这些变化,我必须在主回购协议之外克隆每个子回购协议


如果我需要克隆主回购协议呢


也许像android的回购管理工具“回购”这样的东西对这方面可能有用

在发布此消息之前,您是否对堆栈溢出进行过任何研究?请看一看。另一个可能的解决方案是使用子树或子模块。如果我理解正确,每次合并的repo更改时,我都必须在主repo上创建一个提交,以更新子模块中的ref,而子模块中的ref也会超指向。。(这可能经常发生)。那么,子树有什么好处呢..子模块-所有内容都在子树中的文件夹(git中的子项目)中管理所有内容都在根文件夹中管理,但存储在自己的文件夹(单个文件夹)中我知道它们是什么。我只是不想他们的内容连接到我的主要回购。请看我的答案。我不想用子回购的不必要的提交、符号链接或其污染我的主回购。(这就是子模块的用途)--我想管理我的部分内容,这些内容应该驻留在一个目录中,但在不同的存储库中。(相同-子模块)>但是要推动更改,我必须在主repo之外克隆每个子repo。[没错,你必须拉取每个子模块]如果我需要克隆主回购怎么办?[您可以毫无问题地克隆它,只需克隆然后子模块初始化+更新]也就是说,如果我在我的repo中将“fusion”添加为子模块。。我只想合并两份回购协议,仅此而已。我不需要跟踪这种合并是在我的主repo(子模块更新提交)中进行的。它们是我的3个不同但相关的项目,有一个不寻常的目录结构,你可以说,“repo”似乎是我用例中更好的工具和方法。