是否可以在一个目录中拥有2个git存储库?我想不会,但我想我会问.基本上,我想检查我的主目录配置文件(例如.emacs),它应该在我工作的所有机器上是通用的,但是有本地文件的第二个存储库(例如.emacs.local),其中包含机器特定的配置.我能想到的唯一方法是将本地配置放在子目录中,并忽略主git存储库中的子目录.还有其他想法吗?
本文相对较好地介绍了这一点:
https://github.com/rrrene/gitscm-next/blob/master/app/views/blog/progit/2010-04-11-environment.markdown
基本上,如果您使用命令行工作,这比您猜测的更简单.假设你想要2个git repos:
.gitone .gittwo
你可以像这样设置它们:
git init . mv .git .gitone git init . mv .git .gittwo
您可以添加一个文件并将其提交给只有这样的文件:
git --git-dir=.gitone add test.txt git --git-dir=.gitone commit -m "Test"
所以git的选项首先是命令,然后是命令,然后是git命令的选项.您可以轻松地为git命令添加别名,例如:
#!/bin/sh alias gitone='git --git-dir=.gitone' alias gittwo='git --git-dir=.gittwo'
因此,您可以通过少量输入来提交一个或另一个,例如gitone commit -m "blah"
.
看起来更棘手的是忽略.由于.gitignore通常位于项目根目录中,因此您需要找到一种方法来切换它,而无需切换整个根目录.或者,您可以使用.git/info/exclude,但是您执行的所有忽略都不会被提交或推送 - 这可能会搞砸其他用户.使用任何一个repo的其他人可能会推送.gitignore,这可能会导致冲突.我不清楚解决这些问题的最佳方法.
如果您更喜欢TortoiseGit等GUI工具,那么您也会遇到一些挑战.您可以编写一个小脚本,暂时将.gitone或.gittwo重命名为.git,以便满足这些工具的假设.
如果我了解您正在做什么,您可以在一个存储库中处理所有内容,为每台计算机使用单独的分支,以及包含公共主目录配置文件的分支.
初始化repo并将公共文件提交给它,也许将MASTER分支重命名为Common.然后为您使用的每台机器创建一个单独的分支,并将特定于机器的文件提交到该分支.每次更改公共文件时,将公共分支合并到每个机器分支中并推送到其他计算机(如果有很多,请编写脚本).
然后在每台机器上,检查该机器的分支,它还包括公共配置文件.
看看git子模块.
子模块允许外部存储库嵌入源树的专用子目录中,始终指向特定的提交.
通过使用变量是可能的,GIT_DIR
但是如果您不知道自己在做什么,则有很多警告。
RichiH编写了一个名为vcsh的工具,它是一个使用git的虚假存储库管理dotfiles的工具,可以将多个工作目录放入$ HOME.与csh AFAIK无关.
但是,如果你确实有多个目录,那么git-submodules的替代方案(在最好的情况下这是一种痛苦,而这个例子的使用并不是最好的情况)是gitslave,它会让奴隶回购在在任何时候都是分支,并且不需要三步过程来对子公司仓库进行更改(签出到正确的分支,进行并提交更改,然后进入超级项目并提交新的子模块提交).