我有一个存储库B,其内容需要驻留在A/src/B中A ...的子目录中.我想最终得到一个存储库A,其中包含A和B提交的历史记录.
Web上的其他解决方案似乎向我展示了如何在独立的子树中保持树的完整性,或者合并具有相同目录结构的存储库的选定部分.
那么,有没有办法做到这一点?
Mar*_*air 27
事实上,这很简单,但命令不一定是显而易见的.如果你以后需要从B中加入更多更新,那么一个不错的选择是git-subtree(不要与子树合并策略混淆).您说您希望最终得到一个存储库,因此使用git子模块是不合适的.
这是经典的做法,有一些解释:
转入存储库A:
cd A
Run Code Online (Sandbox Code Playgroud)master从存储库中获取分支(或其他)B,并(暂时)将其存储为FETCH_HEAD:
git fetch /home/whoever/dev/B master
Run Code Online (Sandbox Code Playgroud)执行忽略更改FETCH_HEAD但不提交的合并.这样我们以后可以提交合并,并且合并的父级将包含FETCH_HEAD.(该父项存储在.git/MERGE_HEAD.)
git merge -s ours --no-commit FETCH_HEAD
Run Code Online (Sandbox Code Playgroud)从FETCH_HEAD(仍然是获取的master分支B)读取树到子目录的临时区域src/B.的-u手段来反映,在工作副本的结果,以及:
git read-tree --prefix=src/B/ -u FETCH_HEAD
Run Code Online (Sandbox Code Playgroud)最后提交结果:
git commit -m "Merge in the history of master from B into src/B"
Run Code Online (Sandbox Code Playgroud)这类似于GitHub关于子树合并策略的帮助页面中的建议,除了我已经跳过创建一个遥控器B.请注意,此过程实际上还没有使用子树合并策略 - B如果我理解正确的话,那只会包含进一步的更改.
| 归档时间: |
|
| 查看次数: |
3756 次 |
| 最近记录: |