tl; dr:多个回购彼此重叠。因为原因我需要这个。
我在Perforce检查了一个大型项目,我厌倦了在架子上玩耍,没有大量的手工劳动而无法记录实验分支,也无法在大块代码中恢复错误无法单独提交到中央存储库。
因此,在"官方"之间Perforce提交,我已经将Git repos维护在同一个工作区内(因为我们的构建过程与Perforce进行了独特的集成),然后可以拥有自己的分支,提交历史记录等等。
我面临的问题是,由于磁盘空间有限和冰下载速度有限,我经常被迫重新使用Perforce结帐以完成多项任务。这需要在git中的工作之间切换(没有它就完成任何生产性工作都是不可能的)。但是,由于Perforce与git同步会导致合并冲突,因此每个git checkout仅管理一小部分文件,具体取决于手头的任务。当大规模忽略所有其他文件并保持分支数量可管理时,这会出现问题。
我想在我的P4结账的顶层保留一些独立的.gits,因此需要能够指定" .git"的名称。目录和" .gitignore"在调用或通过环境变量显式文件。
不幸的是,由于git处理符号链接的方式,我不能将这些单独的存储库与P4结帐分开,而不必手动来回同步,这很容易出错。
答案 0 :(得分:3)
有环境变量GIT_DIR
和GIT_WORK_TREE
可以控制哪些repo和工作目录git命令会影响。 git命令本身也有选项,称为--work-tree
和--git-dir
。
因此,您可以定义简单的shell别名来更改每个项目的环境:
alias work_on_foo='export GIT_DIR=mybigproject/.foo.git; export GIT_WORK_TREE=mybigproject'
或者shim会将所需的选项附加到git命令:
alias foogit='git --git-dir=mybigproject/.foo.git --work-tree=mybigproject'
您可以查看我的dotfiles repo中两种方法的examples,包括一些额外的逻辑,例如为某些git子命令添加特殊处理。
至于.gitignore
,我认为没有一个env变量,但你可以使用info/exclude
文件(它应该放在.git
中)完全相同目的(它具有相同的语法,只是不像.gitignore
那样是存储库数据的一部分。或者,您可以使用名为core.excludesfile
的git配置设置,并在每个.git / config中将其设置为不同指向适当的文件。
答案 1 :(得分:0)
我也遇到类似的情况,但是我将git-p4和git工作区结合使用。
但是,由于磁盘空间有限,听起来这对您不起作用。如果您可以增加磁盘空间,则可以拥有一个git repo和多个git工作区。