Git嵌套仓库执行git remote add origin报错的解决问询
解决嵌套独立Git仓库的识别问题
嘿,这个问题我之前折腾过好多次,完全懂你的痛点——Git默认会往上找父目录的.git文件夹,导致子文件夹没法正常做独立仓库。下面给你一步步的解决办法:
1. 先搞定「remote origin already exists」的报错
你现在执行git remote add origin时报错,大概率是这个子文件夹已经初始化过Git,并且之前加过origin了。先把旧的远程仓库删掉:
git remote remove origin
然后再重新添加你要的远程仓库:
git remote add origin https://bitbucket.org/team/repo
2. 让Git彻底忽略上层仓库
Git的“向上查找仓库”机制是罪魁祸首,我们可以用三种方式关掉它:
临时解决(只在当前终端生效)
在子文件夹的终端里跑这个命令,告诉Git别往上找父目录的仓库了:
export GIT_CEILING_DIRECTORIES="$PWD/.."
这个命令会限制Git的查找范围,到当前文件夹的父目录就停,不会再碰上层的.git文件夹。
永久解决(针对当前用户)
如果不想每次都输命令,把这个环境变量加到你的shell配置里(比如~/.bashrc或者~/.zshrc):
echo 'export GIT_CEILING_DIRECTORIES="/你上层仓库的根目录路径"' >> ~/.bashrc
替换成你上层仓库的实际路径,以后所有这个父目录下的子文件夹执行Git命令时,都不会被上层仓库干扰。
单个仓库永久生效
要是只想让这个子仓库独立,也可以直接在子仓库的Git配置里加个设置:
git config --local core.repositoryformatversion 0
这个配置会强制Git把当前目录当作独立仓库的根,彻底切断和上层仓库的联系。
3. 关于直接克隆仓库的疑问
直接克隆仓库到子文件夹绝对不是用子模块,这只是个临时的绕路方案:
- 克隆会在子文件夹里生成全新的
.git目录,完全独立,所以Git不会往上找上层仓库。 - 但如果是从无到有初始化子仓库,还是得用上面的方法来阻止Git的自动识别。
内容的提问来源于stack exchange,提问作者ThatBrianDude
相关产品推荐
相关产品推荐

