【问题标题】:What happens to a git repository when cloning another one into the same folder?将另一个 git 存储库克隆到同一文件夹时会发生什么情况?
【发布时间】:2022-10-14 01:55:36
【问题描述】:

here 等其他答案中,我了解到这会导致嵌套存储库。看起来怎么样?可以在它们之间切换当它们都具有相同的名称时它是如何工作的?

我错误地这样做了,它看起来好像原来的被覆盖了。 .gitignore 被替换,我只看到新存储库的分支,而旧存储库的文件显示在工作目录中。

【问题讨论】:

    标签: git


    【解决方案1】:

    git clone 命令拒绝跑步在占用的目录中。

    默认git clone操作:

    git clone <url>
    

    创建一个新的空目录这样新的克隆就不会使用占用的目录。但是,您可以编写:

    git clone <url> <path>
    

    告诉git clone 使用指定的path.在这种情况下,path必须命名一个存在的,空的目录或能够被创建作为一个空目录。空目录将由git clone 填充。如果path参数命名一个存在且不为空的目录,git clone 拒绝运行。

    “嵌套”存储库发生在工作树一个普通的日常存储库包含一个目录,该目录本身就是另一个 Git 存储库的工作树。

    例如,假设您运行:

    git clone https://github.com/git/git.git
    

    创建 ./git 作为 Git 存储库克隆的工作树,然后:

    cd git
    

    进入这个工作树。使用“显示隐藏文件”检查树(例如,Linux 系统上的ls -A),您会看到这里有一个.git 目录。这个隐藏的.git 目录包含实际的存储库;您执行cd git 进入的顶级git 持有工作树。

    如果您现在运行:

    git clone <other-url> project
    

    并在工作树中创建了一个新目录project,运行ls -A project 或类似内容会告诉您project 也包含一个.git 目录。 project 目录是另一个存储库的工作树。

    现在运行git add project(将打印一条巨大的警告消息),然后运行git commit,将添加一个gitlink到 Git 的 Git 存储库。 gitlink 是子模块的一半。此时缺少的一半是.gitmodules 文件,git submodule add 会创建该文件,但运行git add project 没有。这是一个根本性的错误:此时创建的提交具有我喜欢称之为“半途而废的子模块”,无法合理使用。这就是为什么git add project 会打印出巨大的警告信息。 (如果git add project 拒绝添加它可能会更好,真的,但这不会向后兼容,而且 Git 人员非常重视一次向后兼容数十年。)

    那么,无论您的实际问题是什么,这都是您在这里没有正确描述的问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-25
      • 1970-01-01
      • 2010-10-13
      • 2010-11-21
      相关资源
      最近更新 更多