Recursively add files by pattern

前端 未结 11 1327
予麋鹿
予麋鹿 2020-11-28 18:18

How do I recursively add files by a pattern (or glob) located in different directories?

For example, I\'d like to add A/B/C/foo.java and D/E/F/bar

相关标签:
11条回答
  • 2020-11-28 18:31

    Sergio Acosta's answer is probably your best bet if some of the files to be added may not already be tracked. If you want to limit yourself to files git already knows about, you could combine git-ls-files with a filter:

    git ls-files [path] | grep '\.java$' | xargs git add
    

    Git doesn't provide any fancy mechanisms for doing this itself, as it's basically a shell problem: how do you get a list of files to provide as arguments to a given command.

    0 讨论(0)
  • 2020-11-28 18:31

    Just use git add *\*.java. This will add all .java files in root directory and all subdirectories.

    0 讨论(0)
  • 2020-11-28 18:33

    You can use git add [path]/\*.java to add java files from subdirectories,
    e.g. git add ./\*.java for current directory.

    From git add documentation:

    Adds content from all *.txt files under Documentation directory and its subdirectories:

    $ git add Documentation/\*.txt
    

    Note that the asterisk * is quoted from the shell in this example; this lets the command include the files from subdirectories of Documentation/ directory.

    0 讨论(0)
  • 2020-11-28 18:34

    With zsh you can run:

    git add "**/*.java"
    

    and all your *.java files will be added recursively.

    0 讨论(0)
  • 2020-11-28 18:41

    Adding a Windows command line solution that was not yet mentioned:

    for /f "delims=" %G in ('dir /b/s *.java') do @git add %G
    
    0 讨论(0)
  • 2020-11-28 18:47

    A bit off topic (not specifically git related) but if you're on linux/unix a workaround could be:

    find . -name '*.java' | xargs git add
    

    And if you expect paths with spaces:

    find . -name '*.java' -print0 | xargs -0 git add
    

    But I know that is not exactly what you asked.

    0 讨论(0)
提交回复
热议问题