Git仓库与git目录存储在其他地方

我很抱歉,如果这是一个重复的,我已经搜索谷歌和SO,并找不到任何类似的东西,因为它是一个相当通用的词搜索!

我想要的是将.git目录放在工作树之外。

我需要这样做,因为它是使用其他版本控制软件的项目中的“隐形”git存储库,不幸的是,它的设置方式是在一个根目录中有多个项目(我希望每个项目都是git存储库)并使用构建脚本来清除项目目录中的文件。 到目前为止,我一直在对根目录进行版本控制,并忽略所有其他项目目录,因此其中一个项目是版本控制的,但我现在想要对另一个项目进行版本控制,并且显然不能在根目录中有多个git存储库(或者我可以?这将是一个很好的替代答案)。 如果可能的话,将.git目录放在磁盘上的其他位置将是一个很好的解决方案。


你可以使用--git-dir全局选项明确指定git仓库的路径,用于所有git命令。 当你在init使用这个选项时,它通常创建一个裸仓库,但是如果你提供了--work-tree ,你也可以用一个“分离的”工作树来初始化一个非裸仓库。

git --git-dir=/var/repo/one.git --work-tree=/var/work/one init

从那时起,你仍然需要提供--git-dir选项或设置GIT_DIR环境变量,以便git知道存储库的位置,因为在工作树内没有任何git特定数据,但工作树将会从git存储库配置适当地确定。


您可以通过在工作树的根.git中创建一个名为.git的文件来链接到任意位置的gitdir,其中包含以下内容:

gitdir: <path-to-gitdir>

当然,您需要先将原始.git目录移至其外部位置。

所有行为良好的git工具都会遵守这一点,而不依赖于环境变量或特定于操作系统的机制,如符号链接。 您还应该能够将这些链接放置在目录层次结构中的任意位置,从而链接到多个存储库。

当然,这样的.git文件仍然可以在工作树中看到,所以这种方法在您的情况下可能是不可接受的。 但是,如果这样的文件被删除,恢复.git重要(与.git目录不同)。


Git与其他几个VCS交互操作,因此这可能不是解决问题的最佳方法。

然而,这是可能的:使用git-config你可以告诉git使用另一个目录,而不是包含.git作为工作树的根目录。

如果你在其他项目的根目录foo上面运行git init一个目录,那么你可以使用:

git config core.worktree ../foo

其中../foofoo项目相对于.git目录的路径。

但是,使用相对路径, git工具只能在foo的父目录中工作,而不能在树中的任何其他位置工作。 通过使用绝对路径,您可以避免这种情况(但是如果您移动项目,则必须记住更改它)。

链接地址: http://www.djcxy.com/p/18877.html

上一篇: Git repository with git directory stored elsewhere

下一篇: Using dropbox and git without conflitcts