说我有一些大的回购,BigRepo,我想将它添加为另一个项目的子模块。通常我会做
$ git submodule add git@somewhere.com/me/BigRepo.git
但我不想再次下载整件事了。幸运的是我已经结账了,所以我试试
$ git clone ../BigRepo
Cloning into 'BigRepo'...
done.
$ git submodule add git@somewhere.com/me/BigRepo.git
Adding existing repo at 'BigRepo' to the index
大!除
origin
遥控器指向../BigRepo
;我希望它指向git@somewhere.com/...
.git
文件夹位于BigRepo/.git
而不是.git/modules/BigRepo
那么正确的做法是什么?
答案 0 :(得分:1)
要做一些修复工作,因为你想要丢弃该代理仓库的所有证据(../BigRepo
),但这并不难。
从这里最简单的可能就是重做子模块添加你拥有的东西,通过
来做# undo the in-repo add
mv BigRepo ../agggh_I_meant_to_add_this_from_outside
git rm --cached BigRepo
git config -f .gitmodules --remove-section submodule.BigRepo
git config --remove-section submodule.BigRepo
你的退出已经完成了。
现在,如果您从本地未发布的仓库添加子模块,则必须稍后更正其他网址以方便其他人,但这很简单:
# Get `git submodule add` to do the hoisting for you
git submodule add ../agggh_* BigRepo
# but from now on use u://r/l as the submodule's published repo:
git config -f .gitmodules --set submodule.BigRepo.url u://r/l
git config --set submodule.BigRepo.url u://r/l # alternate spelling of `git submodule sync BigRepo` here
# and the published repo is my copy's `origin` too
git --git-dir=BigRepo/.git remote set-url origin u://r/l
(
在评论中编辑寻址问题:
从mv
/克隆到mv'd一对是因为你可能已经完成,或已经完成并忘记了一些工作,因此../BigRepo
可能会超出过期。这只是一个安全游戏; rm -rf BigRepo
以及之后的git submodule add ../BigRepo
如果当前添加的版本真的可以丢弃,也会有效。
我无法确定上面添加的任何子模块如何引发网络活动 - ../anything
与../ThisRepo
位于同一文件系统,即.
,对吧? git clone
一个简单的相同文件系统路径,相对或绝对,除了你采取措施激发实际副本之外,它会使用廉价的硬链接 - 这甚至可以在NTFS上运行。仅当您指定完整URL或以其他方式强制git创建完整副本克隆的问题时。也许只是咖啡因异常缓慢地踢,如果我遗失了一些东西,无论谁看到它,只需编辑它或编辑整个段落。
)