使用$ GIT_DIR环境变量或--git-dir标志在同一目录中运行多个git repos是不是一个坏主意?

时间:2016-07-13 13:53:56

标签: git

我最近发现在命令中设置$GIT_DIR环境变量或使用--git-dir标记将允许您指定一个git存储库来运行该命令。这意味着您可以有两个不同的{目录树中的{1}}目录,如果需要,可以将它们重命名为其他目录,并且仍然可以使用您喜欢的任何目录。

一个问题是,您当前所在的目录将被视为您的工作目录。如果要从子目录甚至是工作树中甚至不在的目录中输入git命令,可以指定要与.git标志或--work-tree环境变量一起使用的工作目录

这开辟了很多可能性。例如,你可以在你的主目录中为你的dotfiles安装一个git repo,并且在子目录中还有其他git repos用于其他工作。

有没有理由不经常这样做?这是推荐的吗?

2 个答案:

答案 0 :(得分:2)

作为chepner answered,它 非常有用,它只是一点点(或很多)痛苦的屁股,正如你自己指出的那样,因为你还必须在各种情况下设置$GIT_WORK_TREE或使用--work-tree。您还遇到的问题是,无论工作树如何,每个存储库只有一个临时区域$GIT_DIR/index。您也可以通过设置$GIT_INDEX_FILE

来覆盖此设置

(下一部分的方向与你不同;为了完整性,我将其包括在内。)

在旧版本的Git中,有一个脚本试图让这更容易,在Git 2.5版本中,脚本被(大部分)替换为新命令git worktree,可以让你添加明确的单独工作-trees(每个意味着位于不同的分支上,并检查以确保它保持这种方式)。 Git知道如何自动处理这些问题,并自动处理--git-dir--work-tree和单独的索引文件,。但是它有一些错误,正在进行修复;我不建议在至少Git 2.6版本之前使用它,最好是2.9或者现在的最新版本,如果你要大量使用它。

答案 1 :(得分:1)

更改工作目录的功能使得为同一存储库创建多个工作目录变得容易。例如,如果您同时处理两个分支(例如,常规开发分支和错误修复分支),这很有用。

尝试为多个存储库共享同一个工作目录是有问题的,因为两个提交不太可能共享一个工作目录。