如何禁止git命令移动到父目录?

3
我在我的主目录下有一个git仓库,用于存储我的配置文件。 每当我在没有自己的git仓库的子目录中使用git命令(例如git log),我会得到配置文件仓库的日志,例如:
/home/dimid     $ cd foo
/home/dimid/foo $ git status

... log of ~/.git

然而,我希望仅将我的点存储库限制为以点开头的文件和目录(例如 .vim),这样当我在~/foo中且~/foo/.git不存在时,git log将输出通常的结果。

fatal: Not a git repository (or any of the parent directories): .git

尽管父目录~包含一个.git文件夹,但仍然需要进行操作。
我考虑给git设置别名并添加一个例外,是否有更为优雅的方法?

我恐怕这很难获得,甚至可能是不可能的。Git被设计成向上遍历目录以检查当前目录是否是git存储库的一部分;由于您的主目录就在其中... - Chris Maes
与其搜索如何使Git忽略子目录,也许你应该搜索如何正确地将像.vimrc这样的文件保留在源代码控制中。 - tom
@tom 我很乐意听取建议。 - dimid
@dimid 这是有人对于同样根本问题的回复,链接为 https://dev59.com/4mMl5IYBdhLWcg3wsIuA#18197818. - tom
1个回答

3
我不知道有什么方法可以做到这一点;因为Git始终向上移动您的目录树,直到找到.git目录。现在由于您的/home目录是一个git存储库;所有子目录将始终在您的/home文件夹中找到那个.git目录。
我可以看到一个变通方法,但它并不是非常干净...
  • 在您的主目录(或其他地方)创建一个子目录;在那里您将初始化您的git存储库(例如“/home/user/configfiles/”)
  • 现在在要保留在您的git存储库中的configfiles和系统文件之间创建硬链接(例如“ln ~/.config ./”)(注意您需要使用硬链接;否则git将只对符号链接所指向的路径进行版本控制)
这样您的主目录将不再是git存储库;问题就避免了...

谢谢,但是~有一些子模块(比如.vim/bundle),所以我宁愿不要动态跟踪它们并添加硬链接。 - dimid
我知道这不是最美的解决方案...但你无论如何都必须为每个文件执行'git add'操作吗? - Chris Maes
我同意这个解决方案并不是很美观(正如我在答案中所说的)。它确实有一些缺陷;但这是我能想到的最好的解决方案... - Chris Maes
谢谢,我已经为你的答案点赞了。如果没有更好的选择出现,我会接受它或尝试别名技巧。 - dimid
1
这是一个有效的问题;如果我听到任何其他建议,我也会很感兴趣 :) - Chris Maes

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接