Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/147.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在不同目录级别合并git存储库_Git - Fatal编程技术网

在不同目录级别合并git存储库

在不同目录级别合并git存储库,git,Git,我有一个存储库B,其内容需要驻留在a的子目录中。。。在A/src/B中,我希望最终得到一个存储库A,其中包含A和B提交的历史记录 web上的其他解决方案似乎向我展示了如何在单独的子树中保持树的完整性,或者如何合并具有相同目录结构的存储库的选定部分 那么,有没有办法做到这一点呢?事实上,这很简单,但命令并不一定显而易见。如果您以后需要合并来自B的更多更新,一个不错的选择是(不要与子树合并策略混淆)。您说您希望得到一个存储库,所以使用git子模块是不合适的 下面是进行此操作的经典方法,并给出一些解释

我有一个存储库B,其内容需要驻留在a的子目录中。。。在A/src/B中,我希望最终得到一个存储库A,其中包含A和B提交的历史记录

web上的其他解决方案似乎向我展示了如何在单独的子树中保持树的完整性,或者如何合并具有相同目录结构的存储库的选定部分


那么,有没有办法做到这一点呢?

事实上,这很简单,但命令并不一定显而易见。如果您以后需要合并来自B的更多更新,一个不错的选择是(不要与子树合并策略混淆)。您说您希望得到一个存储库,所以使用git子模块是不合适的

下面是进行此操作的经典方法,并给出一些解释:

  • 更改为存储库A:

    cd A
    
  • 从存储库
    B
    中获取
    分支(或任何分支),并(临时)将其存储为
    获取头

    git fetch /home/whoever/dev/B master
    
  • 执行合并,忽略从
    FETCH\u HEAD
    中所做的更改,但不提交。这样我们以后就可以提交合并,合并的父级将包括
    FETCH\u HEAD
    。(该父项存储在
    .git/MERGE\u HEAD
    中)

  • 将树从
    FETCH_HEAD
    (仍然是
    B
    master
    分支)读入子目录
    src/B
    的暂存区。
    -u
    也意味着在工作副本中反映结果:

    git read-tree --prefix=src/B/ -u FETCH_HEAD
    
  • 最后提交结果:

    git commit -m "Merge in the history of master from B into src/B"
    

  • 这与中的建议类似,只是我跳过了为
    B
    创建远程。请注意,这个过程实际上并没有使用子树合并策略——如果我理解正确的话,这只适用于合并
    B
    中的进一步更改。

    这对我来说更清楚。我很难理解“我们的”是什么意思。。。我还以为fetch会把文件放错目录。。。谢谢。Git版本2.9和更高版本将会。如果出现错误“致命:拒绝合并不相关的历史记录”,请将
    --allow unrelative histories
    标志传递到
    git merge
    git commit -m "Merge in the history of master from B into src/B"