我在我的本地git存储库中添加了一个子模块(用于嵌入式项目的GUI库。)我需要为我的硬件添加几个驱动程序文件并将它们添加到本地开发分支:这些更改不会被推回到远程。我的计划是偶尔从远程转移到master分支的更改,然后在这些更改之上重新设置我的dev分支。
当我尝试使用以下方法制作本地存储库的本地克隆时出现问题:
git clone --recursive local_repo local_clone
我得到了
fatal: reference is not a tree: ca025c09ca2b7b82ca086309eeb0696d674cb1d0
Unable to checkout 'ca025c09ca2b7b82ca086309eeb0696d674cb1d0' in submodule path 'uGFX/ugfx_submodule'
这个特定的提交在我的本地开发分支上(并且绝对不在子模块的远程服务器上。)
是否有一种简单的方法可以克隆本地存储库? (除了cp -r =)
答案 0 :(得分:2)
冒着回答我自己问题的失礼的风险,我昨晚很晚才想出一个可行的解决方案......
我想要的是基于Triangular Workflow,我的要求是:
我的解决方案涉及使用上游存储库as VonC mentioned的Triangular Workflow版本。以下是我的解决方案的细节:(您可能可以修改以满足您的需求)
将我的存储库的主分支推送到myproduct.git存储库。我没有写下这部分,但我想我刚刚为原点添加了一个遥控器并推动了主人:
git remote add origin git@pi-b:/mnt/git_repos/myproduct.git
git push
从我的存储库的顶层目录添加uGFX子模块
git submodule add https://bitbucket.org/Tectu/ugfx.git ugfx_submodule
进入子模块的目录,并将子模块的主分支名称更改为更新
git branch -m master updates
将远程原点重命名为bitbucket,更新分支(以前称为master)跟踪
git remote rename origin bitbucket
此时,运行git branch -vv
就像检查一样,它应该显示一个跟踪远程bitbucket主分支的分支(更新)
现在您的子模块不再具有主分支或原点。我希望子模块主分支跟踪我的Pi Git服务器的存储库,所以我添加了一个远程源,创建一个主分支,并将主分支推送到服务器(告诉它跟踪该分支):
git remote add origin git@pi-b:/mnt/git_repos/myproduct_ugfx.git
git checkout -b master
git push -u origin master
既然我已经将子模块推送到我的服务器,我将uGFX子模块更改为指向我的服务器,所以当人们使用--recursive克隆整个repo时,他们会得到我的更新
git config remote.origin.url git@pi-b:/mnt/git_repos/myproduct_ugfx.git
此时,我想在uGFX树中添加一些文件。我将它们添加到主分支,提交,然后推送(进入Pi存储库。)还记得在子模块之外进行指导,运行' git子模块同步' (不确定是否必要),然后提交+将这些更改推送到主/外部仓库。
现在,当Bitbucket存储库发生更改时,我可以将它们拉入更新分支,然后当我对它们进行测试并希望将它们集成到我的产品中时,我可以将它们与master合并并推送通过简单的git推送它们到Pi存储库。
如果有人想要从Pi克隆myproduct存储库,只要他们可以访问Pi(参见Git book中添加ssh密钥),他们就可以使用
git clone --recursive git@pi-b:/mnt/git_repos/myproduct.git
答案 1 :(得分:0)
这些更改不会被推回到远程
但是主要的回购仍然记录了子模块的准确状态。
克隆时,它将从子模块上游repo获取该状态...这将无法提供它,因为这些更改没有被推回到远程。
您可以考虑:
看看父回购的克隆是否有效。