Emacs projectile with multiple repos (git/svn etc.) in one project
Asked Answered
A

3

10

I have a single git repo with a directory structure that looks like this:

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

root is my working directory, 3rd consists of multiple third-party git submodules.
projectile-find-file only finds files in src, it does not work for the submodules.

Amanita answered 22/4, 2014 at 5:32 Comment(2)
It seems you were able to solve the problem yourself which is great! However, instead of including the solution in your question, you might want to consider posting an answer below. (You will even be able to accept it after 48 hours.)Bill
You're welcome, and thanks for following up on my suggestion! :)Bill
A
7

projectile-git-command uses git ls-files to list the files belonging to the project,
so I resolved the problem with the following code:

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

git-ls-all-files is a shell script:

\#!/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
Amanita answered 24/4, 2014 at 9:0 Comment(2)
Or, all in one command: (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/!')")Indifferent
That's cool! Thanks you very much! And two git ls-files commands should use same flags -zco.Amanita
T
7

I just had an equivalent problem, I fixed it by adding an empty .projectile file to my root directory, this tells projectile that that directory is the real project root and to search all the files in it's subdirectories when you want to find something.

See here for more info.

Tardiff answered 3/2, 2015 at 17:48 Comment(1)
Thanks - this helped me solve a similar issues as OP. I needed a way to tell projectile to load multiple repositories (similar to "adding a folder" in VSCode) so that I could grep through and open files belonging to multiple repositories.Electric
O
0

In addition to the solution of Mike, I add a .projectile file to each submodule and this submodule will become a new project in Emacs.

Olivero answered 3/7, 2020 at 11:53 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.