【问题标题】:Can't add existing Git repository into new repository无法将现有 Git 存储库添加到新存储库
【发布时间】:2012-09-23 16:44:55
【问题描述】:

我正在尝试创建一个新存储库并向其中添加两个项目。其中一个项目已经在 Git 源代码控制下,所以我复制了该项目并删除了 .git 文件夹并删除了我拥有的存储库。当我将项目添加到我的存储库时,不受源代码控制的项目会被很好地添加,但另一个会被添加为子模块(GitHub 上的绿色文件夹)。

我尝试通过对其执行git rm --cached 来删除子模块,但它仍然存在并且我无法将项目的文件添加到存储库中。

【问题讨论】:

标签: git github git-submodules


【解决方案1】:

您是否尝试过全新结帐?似乎没有git submodule remove,所以您必须手动编辑.gitmodules

如果您想使用签出副本将模块 X(已在版本控制下)添加到模块 Y(新):

  • Cd 进入 X
  • 确保它是一个独立的模块:不应该有任何.gitmodule(如果有,那就更复杂了)。
  • 运行 git status 以确保您没有任何未提交的更改。
  • 运行 git clean -xfd 以删除某些 .gitignore 中的任何内容,例如临时构建文件等。
  • 删除.git目录
  • 将 X 复制到 Y 中
  • 在 Y 内运行 git add X

您也可以在 X 中执行 git clone path-to-Y 后跟 rm -rf Y/.git 之类的操作。

【讨论】:

  • 如果我在这个存储库中有未提交的更改怎么办?是这样的,因为之前的 GitHub repo 是私有的并且已经过期,所以我无法推送更改。
  • 无论如何,这解决了我的问题。谢谢你,马丁。
  • 您可以只在本地提交,而无需推送更改。但是,当然,您也可以在未提交更改的同时进行复制。从没有未提交更改的 repo 复制只会更容易跟踪历史记录 - 您可以在提交消息中包含修订。
  • 但是,如果您有任何未提交的更改,您必须非常小心git clean -xfd - 此命令将删除您添加的所有文件,但尚未添加到索引中。这只是快速删除工作树中但不在存储库中的所有临时构建文件的最简单方法。
【解决方案2】:
rm -rf path_to_submodule
rm -rf .git/path_to_submodule
rm .gitmodules
git commit -am "removing submodule"
git push

.gitmodules 应该不存在 e .git/ 不应该有来自子模块的引用

检查:

git ls-files | grep submodule_name
find . | grep submodule_name

最后:

git submodule add git@git.whatever.com.br:johndoe/johndoe_repo.git johndoe_branch/johndoe_repo --force

--force 是可选的,如果您的文件系统中已有该文件夹

【讨论】:

    猜你喜欢
    • 2019-09-17
    • 2020-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-16
    • 1970-01-01
    相关资源
    最近更新 更多