Emacs projectile如何在一个项目中使用多个仓库(git/svn等)

9

我有一个单一的git仓库,其目录结构如下:

root ---------- src
        |
        |
        |------ 3rd

root 是我的工作目录,3rd 包含多个第三方 Git 子模块。
projectile-find-file 只能在 src 中查找文件,它不能用于子模块。


看起来你已经成功解决了问题,这太棒了!然而,与其在问题中包含解决方案,你可能想考虑在下面发布一个答案。 (48小时后你甚至可以接受它。) - itsjeyd
@itsjeyd 谢谢你的提醒。 - guoxx
不客气,感谢您对我的建议的跟进! :) - itsjeyd
3个回答

7

projectile-git-command 使用 git ls-files 列出项目中的文件,
所以我使用以下代码解决了这个问题:

(setq projectile-git-command "git-ls-all-files")

git-ls-all-files 是一个shell脚本:

\#!/bin/zsh
files=`git ls-files -co --exclude-standard`
sb_files=`git --no-pager submodule --quiet foreach 'git ls-files --full-name -co --exclude-standard | sed s!^!$path/!'`
all_files=$files$sb_files

echo $all_files

1
或者,一条命令解决:(setq projectile-git-command "cat <(git ls-files -zco --exclude-standard) <(git --no-pager submodule --quiet foreach 'git ls-files --full-name -co --exclude-standard | sed s!^!$path/!')") - scvalex
太酷了!非常感谢!而且两个git ls-files命令应该使用相同的标志“-zco”。 - guoxx

6
我之前也遇到了类似的问题,我通过在我的根目录下添加一个空的 .projectile 文件来解决它,这告诉 projectile 那个目录是真正的项目根目录,并且在查找文件时搜索它的子目录中的所有文件。
更多信息请参见 这里

谢谢 - 这帮助我解决了一个类似于 OP 的问题。我需要一种告诉 projectile 加载多个存储库的方法(类似于在 VSCode 中“添加文件夹”),以便我可以通过 grep 打开属于多个存储库的文件。 - Kevin Friedheim

0
除了Mike的解决方案,我还为每个子模块添加了一个.projectile文件,这样这个子模块就会成为Emacs中的一个新项目。

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