【问题标题】:Two different Git repo in same directory同一目录中的两个不同的 Git 存储库
【发布时间】:2012-01-08 15:36:42
【问题描述】:

我想维护两个不同的 git repos。存储库应位于同一根目录中。如何实现?

我想要的是:管理两个略有不同的存储库。我可以在同一个目录中有两个完全不同的存储库吗?

【问题讨论】:

  • here,和here,和here,...
  • 第一篇文章并没有完全解决这个问题。它解决的是子模块。我要问的是:我可以基于相同的源文件创建两个单独的存储库吗?
  • 如果您是从 google 来的:上述 cmets 的 4 个可能重复地址子模块或分支。下面接受的答案有一个不同的解决方案,在同一目录中有 2 个绝对不相关的存储库。

标签: git


【解决方案1】:

您可以通过在 git 命令本身上添加以下两个选项之一来实现此目的:

git --work-tree=where/my/code/is --git-dir=some/path/to/my/.git status

这将允许您有 2 个单独的存储库共享同一个工作文件夹。

但是,您应该能够通过使用具有多个分支的一个 repo 来获得所需的内容,并且可能只将某些分支推送到多个遥控器。

【讨论】:

  • 是的,我最终可能会有多个分支只推送选定的早午餐。
  • 我还制作了一个脚本,可以更轻松地使用覆盖的 repos,并且也可以用作包管理器:github.com/capr/multigit
【解决方案2】:

我通过不使用 git 来解决这个问题,git 似乎没有提供一个好的解决方案。我使用directory junction 将新子文件夹链接到父文件夹的子文件夹(即将子文件夹链接到“叔叔文件夹”)。 Windows Vista 及更高版本的命令提示符示例:

cd CurrentFolder/
mklink /J "LinkedFolder" "../TargetFolder"

将导致 LinkedFolder 指向 TargetFolder(注意引号)。然后我将使用的示例文件结构:

  • 根/
    • 目标文件夹/
      • 共享文件
    • 当前文件夹/
      • LinkedFolder/

"POSIX-compliant" operating systems seem to use ln or ln -s for this functionality.

效果很好(注意:以下来自我自己的 Windows 8.1 测试):

  • 在调用mklink 之前,LinkedFolder 不存在
  • 当您建立链接时,您对 TargetFolder 或 LinkedFolder 中的文件所做的任何操作都会反映在另一个中,因为它们是相同的
  • 如果删除链接 (LinkedFolder),实际目标文件夹 (TargetFolder) 不会发生任何变化
  • 如果您删除实际的目标文件夹 (TargetFolder),链接将保持活动状态(不会被删除);如果您随后尝试访问该链接,您只会收到错误消息;如果您再次重新创建实际的目标文件夹 (TargetFolder),链接将继续像以前一样工作!

另请参阅:
NTFS Junction Point
NTFS Symbolic Link
Symbolic Link

【讨论】:

    猜你喜欢
    • 2012-04-29
    • 1970-01-01
    • 1970-01-01
    • 2021-10-23
    • 2010-09-30
    • 1970-01-01
    • 2021-11-03
    • 2012-11-12
    • 2015-12-26
    相关资源
    最近更新 更多