【问题标题】:Git clone multiple branches into same local directory possible?Git可以将多个分支克隆到同一个本地目录吗?
【发布时间】:2015-03-03 03:14:40
【问题描述】:

我们有 2 个独立的存储库,但它们需要位于同一个本地目录中才能正确编译我们的代码。

一个git可以单独克隆到同一个本地目录中而没有任何副作用吗?

git clone a@b.d.com:app/z.git -b b1 local_dir
git clone a@b.d.com:app/y.git -b b1 local_dir

谢谢。

【问题讨论】:

标签: git


【解决方案1】:

不,您不能在同一目录中存在两个 Git 存储库。

其中一个原因是每个 Git 存储库内部都有一个 .git 子目录。如果一个目录下有两个repos,它们的.git子目录会发生冲突。

另一个原因是,如果两个 repos 都包含位于相同相对位置的文件,则不清楚会发生什么。

您可以在其他 Git 存储库中包含 Git 存储库(请参阅 git help submodule),但这并不是您想要的。

您可能应该为更高级别的问题寻找替代解决方案以“正确编译代码”。但是,如果您真的陷入困境并且没有更简单的想法,您可以考虑创建一个符号链接目录,该目录指向两个单独的 Git 存储库中所需的文件。该链接目录甚至可以作为第三个 repo 或现有两个 repo 之一签入。

【讨论】:

    【解决方案2】:

    您可以通过指定git-dirworking-tree 来执行此操作,如this answer 中所述。您的存储库将位于不同的目录中,但共享工作文件夹,允许您混合文件进行编译。

    但是,您可能只能执行一次此操作,然后基本上无法以有意义的方式执行任何其他 git 操作。每个 repo 应该将其他 repo 的文件视为 untracked,因此您的工作目录将永远是脏的。您应该仍然可以提交,但是任何拉取都需要您存储和取消存储所有 untracked 文件。如果它有效,那将是一个巨大的痛苦。

    就个人而言,如果这确实是项目应该编译的方式,我建议打击设置它的人。

    【讨论】:

      【解决方案3】:

      克隆 git 存储库后,您将能够使用 git worktree add <path> [<branch>] 签出不同路径中的多个分支,随 Git 2.5+(2015 年 7 月)提供。

      这用更强大的机制替换了旧脚本 contrib/workdir/git-new-workdir,其中这些“链接”工作树实际上记录在主 repo 新 $GIT_DIR/worktrees 文件夹中(以便在任何操作系统上工作,包括 Windows)。

      同样,一旦您克隆了一个 repo(在类似 /path/to/myrepo 的文件夹中),您可以在 不同 独立路径(/path/to/br1/path/to/br2)中签出不同的分支,同时拥有这些链接到主要回购历史的工作树(不再需要使用--git-dir 选项)

      在“Multiple working directories with Git?”查看更多信息

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-09-27
        • 1970-01-01
        • 2012-11-12
        • 1970-01-01
        • 2022-01-20
        • 2017-06-17
        相关资源
        最近更新 更多