我有一个项目,我有兴趣将其中的部分拆分为开源项目。我已经设置了嵌套的 git 存储库 main、一、二和三:
main/
├── one
├── three
└── two
我认为通过进入“主要”并做
git add one
git add two
git add three
(注意尾部没有斜杠),我会用子存储库设置子模块,然后就可以开始了。
但是,如 How to track untracked content? 中所述, 这只会创建 gitlink 而不是真正的子模块。
不幸的是,这个答案没有帮助,因为它假定在某处有一个“主”存储库else用于“main/one”、“main/two”和“main/three” ”。我希望这些子存储库成为主存储库。我正在考虑伪造子模块(根据 Git fake submodules ),但这不是克隆的特别理想情况。
还有其他建议吗?
最佳答案
你可以做你想做的事,但是你的one
、two
和three
需要对任何需要克隆的人开放它们——“随机”开发存储库通常不是这种情况。
如果你确实设置了它,你需要非常小心不要删除“你的”存储库(或以其他方式使其无法访问),因为它不仅仅是“你的”:它将是 origin 在你的合作者的克隆中,它将作为“中央”/“上游”存储库(如 .gitmodules
中指定)。
如果您所有的协作者都是本地的(并且可以从存储库中读取),您可以通过将其本地路径作为 URL 来将现有的子存储库添加为子模块:
git rm --cached one two three
git submodule add `pwd`/one
git submodule add `pwd`/two
git submodule add `pwd`/three
如果不是所有的协作者都在同一台机器上工作,那么这可能无法正常工作(因为它将在 .gitmodules
中存储本地路径;非本地协作者将不得不调整git submodule init
之后的 URL。
如果您的 one
、two
和 three
可以远程 Git 访问,那么您可以改为指定它们的有效 URL:
git rm --cached one two three
git -c protocol.file.allow=always submodule add server:/path/to/your/main/one
git -c protocol.file.allow=always submodule add server:/path/to/your/main/two
git -c protocol.file.allow=always submodule add server:/path/to/your/main/three
在这两种情况下,由于您已经有一个子存储库,git submodule add
将使用它而不是尝试从指定的路径/URL 克隆。
关于git - 没有 Remote 的嵌套 git 存储库(也称为没有 Remote 的 git 子模块),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6100966/