【问题标题】:git: Split existing repository into submodulesgit:将现有存储库拆分为子模块
【发布时间】:2019-05-10 17:41:31
【问题描述】:

我只找到了有关如何使用 git 子树拆分存储库的答案。但是,我明确想要子模块。

这是一个 Java maven 项目。目前,一切都在一个 Maven 项目和一个存储库中。我的目标是实现这样的目标:

根存储库应包含主 pom.xml、系统文档等 然后应该有几个子模块,一个用于实用程序库,一个用于主应用程序,等等。子模块是它们自己的 maven 项目,从根存储库中的主 maven 项目引用。根存储库将不包含任何源代码。

我可以从当前 HEAD 创建所有新内容,但对我来说重要的是提交历史记录尽可能完整。

【问题讨论】:

    标签: java git maven git-submodules


    【解决方案1】:

    我只找到了有关如何使用 git 子树拆分存储库的答案。但是,我明确想要子模块。

    这正是你需要做的。使用git subtree split <path> -b <branch> 将“main”拆分为分支,然后为每个子模块添加远程并将分支推送到远程。

    # split the "main repo"
    git subtree split -P path -b <branch1>
    
    # For each branch that you extract
    
    # add remote for branch 1
    git remote add submodule1 <url>
    
    # push the submodule
    git push submodule1 <branch>
    

    设置完所有子模块后,将它们添加到“主”存储库中

    # add the submodules 
    git submodule add <url>
    
    # and once all your submodules are added commit the .gitmodules file
    

    【讨论】:

    • 也许我只是没有看到它,但我实际上在哪里创建子模块?浏览文档,我认为每个提取的子树都需要git submodule add ...
    • 这我需要git submodule add ... ...这是将子模块“添加”到您的项目的方法,上面的代码向您展示了如何创建它们
    • 网址到底是什么?我知道一个 url,我的远程 git 存储库之一。那么我应该为每个尚不存在的模块创建一个特定的 url ???
    • 是的。确切地说,每个子模块的 url
    • 好的,谢谢,这就是我不明白的,我需要先在git服务器上创建远程存储库
    【解决方案2】:
    # split the "main repo"
    git subtree split -P path -b <branch>
    
    # Create your repository, and get git url
    
    # add remote for branch
    git remote add submodule <url>
    
    # push the submodule
    git push -u submodule <branch>:master
    
    # remove path
    git rm -r path
    
    # Stage and commit changes
    git add -A
    git commit -m 'Remove <path> for submodule replacement'
    
    # add the submodule 
    git submodule add <url> <path>
    
    # and once your submodule is added commit the .gitmodules file 
    

    【讨论】:

    • 太棒了!感谢您提供有用的答案。我的存储库中有 2 个分支。我在 master 上做了这个子模块拆分,但我无法与我的 dev 分支合并。拆分后,如果我尝试git checkout dev,我会得到:error: The following untracked working tree files would be overwritten by checkout: Please move or remove them before you switch branches. 知道如何解决这个问题吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-23
    • 2011-06-04
    • 1970-01-01
    相关资源
    最近更新 更多