使用git -C指定目录执行clone --mirror报非git仓库的解决方法
报错根因
git -C <目标目录> 的执行逻辑是:首先将工作目录切换到你指定的<目标目录>,再运行后面跟着的git子命令,子命令里传入的所有相对路径,都是以切换后的目标目录为起点解析,和你执行命令时所在的原始目录无关。
你在主目录运行git -C dir1 clone --mirror repo1.git时,git进入dir1目录后会去找dir1/repo1.git这个路径,但你创建的裸仓库实际存放在主目录下,dir1里根本没有这个仓库,自然会抛出找不到Git仓库的报错。
之前你手动cd进入dir1后执行git clone --mirror ../repo1.git能正常运行,本质是因为在dir1目录下,../repo1.git正好指向主目录里的裸仓库,路径匹配所以执行成功。
正确执行方式
两种方案都可以实现目标效果,按需选择即可:
- 方案1:匹配相对路径解析规则,传入git切换到dir1后能正确定位到裸仓库的相对路径
直接在主目录执行以下命令即可:cd ~ git -C dir1 clone --mirror ../repo1.git - 方案2:使用绝对路径指定裸仓库位置,彻底避免相对路径的解析歧义,不会因为工作目录切换出错
直接在主目录执行以下命令即可:cd ~ # 写法1:用~指代当前用户主目录,简洁通用 git -C dir1 clone --mirror ~/repo1.git # 写法2:写全绝对路径,适配所有场景 git -C dir1 clone --mirror /home/你的实际用户名/repo1.git
避坑提示
所有带-C参数的git命令,后续传入的仓库路径、文件路径都要以-C指定的目录作为相对路径起点计算,不要按照你敲命令时所在的当前目录算路径,就能避免绝大多数这类路径不匹配的报错。
内容的提问来源于stack exchange,提问作者Benben
相关产品推荐
相关产品推荐

