假设我有一些大型存储库 BigRepo,并且我想将其添加为另一个项目的子模块。通常我会这样做
$ git submodule add [email protected] /cdn-cgi/l/email-protection/me/BigRepo.git
但我不想再次下载整个内容。幸运的是我已经结账了,所以我尝试一下
$ git clone ../BigRepo
Cloning into 'BigRepo'...
done.
$ git submodule add [email protected] /cdn-cgi/l/email-protection/me/BigRepo.git
Adding existing repo at 'BigRepo' to the index
伟大的!除了
- The
origin
子模块中的远程指向../BigRepo
;我希望它指出[email protected] /cdn-cgi/l/email-protection/...
- The
.git
文件夹位于BigRepo/.git
代替.git/modules/BigRepo
那么这样做的正确方法是什么?
需要进行一些修复,因为您想要丢弃该代理存储库的所有证据(../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
(
编辑解决评论中的问题:
The mv
/clone-from-the-mv'd-one 对是因为也许你已经完成了,或者完成了但忘记了,那里的一些工作,等等../BigRepo
可能已经过时了。这只是一种安全策略; Arm -rf BigRepo
然后git submodule add ../BigRepo
如果当前添加的确实是可丢弃的,那么也可以工作。
我无法弄清楚上面添加的任何子模块如何引发网络活动 -../anything
与以下文件系统位于同一文件系统上../ThisRepo
i.e. .
, 正确的?git clone
普通的相同文件系统路径(相对或绝对)的硬链接会非常便宜,除非您采取措施激发实际副本——这甚至在 NTFS 上也有效。仅当您指定完整的 url 或以其他方式强制解决 git 创建完整副本克隆的问题。也许只是咖啡因的作用异常缓慢,如果我漏掉了一些东西,无论谁看到它,都可以将其编辑进去或将整个段落编辑掉。
)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)