Dav*_*lle 30 git git-submodules
我有一个项目,我有兴趣将部分分解为开源.我已经在"main/one","main/two","main/three"中设置了一个"main"git存储库(例如,在"main"目录中)和子存储库.我认为通过进入"主要"并做
git add one
git add two
git add three
Run Code Online (Sandbox Code Playgroud)
(注意缺少尾部斜杠),我会设置子模块和子存储库,并且很好.
但是,正如Git中所述 - 如何跟踪未跟踪的内容?,这只会创建gitlinks而不是真正的子模块.
不幸的是,这个答案没有用,因为它假定在其他地方有"主要/一个","主要/两个"和"主要/三个" 的"主"存储库.我希望这些子仓库成为主存储库.我正在考虑假子模块(根据Git假子模块),但这对于克隆来说并不是特别理想的情况.
还有其他建议吗?
Chr*_*sen 19
你可以做你想做的,但你的one
,two
和three
需要是谁就将需要克隆访问他们,这不是通常的"随机"的开发库的情况.
如果你设置此,你将需要非常小心,不要删除"您的"资源库(或使其不可访问),因为它不只是"你":这将是起源于你的合作者的克隆,它将作为服务"中央"/"上游"存储库(如中所述.gitmodules
).
如果所有协作者都是本地的(并且可以从存储库中读取),则可以将现有子存储库作为子模块添加,方法是将其本地路径作为URL:
git rm --cached one two three
git submodule add `pwd`/one
git submodule add `pwd`/two
git submodule add `pwd`/three
Run Code Online (Sandbox Code Playgroud)
如果不是所有协作者都在同一台机器上工作,那么这可能无法正常工作(因为它将存储本地路径.gitmodules
;非本地协作者必须在之后调整URL git submodule init
).
如果您的one
,, two
和three
远程Git可访问,那么您可以指定其有效的URL:
git rm --cached one two three
git submodule add server:/path/to/your/main/one
git submodule add server:/path/to/your/main/two
git submodule add server:/path/to/your/main/three
Run Code Online (Sandbox Code Playgroud)
在这两种情况下,由于您已经有一个子存储库,因此git submodule add
将使用它而不是尝试从指定的路径/ URL进行克隆.
Chris的答案不假设为“ master
”存储库(master
是 Git 中主分支的默认名称,而不是存储库)。
它在“”存储库中声明子模块parent
,在您的情况下将是“ main
”。
因此,您需要三个独立的存储库“ one
”“ two
”和“ ”在其他地方three
设置,然后将它们作为子模块克隆并添加到您的“”存储库中:main
# first remove the one directory previously added
git rm --cached one
# then declare the external one repo as a submodule in "main" repo)
git submodule add /path/to/one.git one
Run Code Online (Sandbox Code Playgroud)