패턴별로 파일을 재귀 적으로 추가 다른 여러

다른 디렉토리에있는 패턴 (또는 glob)별로 파일을 재귀 적으로 추가하려면 어떻게합니까?

예를 들어, 하나의 명령으로 A/B/C/foo.javaD/E/F/bar.java(및 다른 여러 Java 파일) 을 추가 하고 싶습니다 .

git add '*.java'

불행히도, 그것은 예상대로 작동하지 않습니다.



답변

추가 할 파일 중 일부가 아직 추적되지 않은 경우 Sergio Acosta의 답변이 가장 좋습니다. git 이미 알고있는 파일로 자신을 제한하려면 git-ls-files필터와 결합 할 수 있습니다 .

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

Git은 기본적으로 쉘 문제이기 때문에이 작업을 수행하는 멋진 메커니즘을 제공하지 않습니다. 주어진 명령에 인수로 제공 할 파일 목록을 얻는 방법은 무엇입니까?


답변

git add [path]/\*.java하위 디렉토리에서 Java 파일을 추가 하는 데 사용할 수 있습니다 (
예 : git add ./\*.java현재 디렉토리).

에서 git add문서 :

디렉토리 및 해당 서브 디렉토리 *.txt아래의 모든 파일에서 컨텐츠를 추가합니다 Documentation.

$ git add Documentation/\*.txt

*이 예에서 별표 는 쉘에서 인용됩니다. 이를 통해 명령은 디렉토리의 서브 디렉토리에있는 파일을 포함 할 수 있습니다 Documentation/.


답변

zsh당신 과 함께 실행할 수 있습니다 :

git add "**/*.java"

모든 *.java파일이 재귀 적으로 추가됩니다.


답변

약간 벗어난 주제 (특히 git 관련 아님)이지만 Linux / unix를 사용하는 경우 해결 방법은 다음과 같습니다.

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

공백이있는 경로가 예상되는 경우 :

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

그러나 나는 그것이 당신이 요구 한 것이 아니라는 것을 알고 있습니다.


답변

Sergey의 답변 (나를 신용하지 마십시오)이 효과가 있습니다.

You can use git add [path]/\*.java

최근 자식으로 :

$git version
git version 1.7.3.4

테스트 용 파일 :

$find -name .git -prune -o -type f -print | sort
./dirA/dirA-1/dirA-1-1/file1.txt
./dirA/dirA-1/dirA-1-2/file2.html
./dirA/dirA-1/dirA-1-2/file3.txt
./dirA/dirA-1/file4.txt
./dirB/dirB-1/dirB-1-1/file5.html
./dirB/dirB-1/dirB-1-1/file6.txt
./file7.txt

힘내 상태 :

$git status -s
?? dirA/
?? dirB/
?? file7.txt

* .txt 추가 :

$git add \*.txt

업데이트 된 상태 :

$git status -s
A  dirA/dirA-1/dirA-1-1/file1.txt
A  dirA/dirA-1/dirA-1-2/file3.txt
A  dirA/dirA-1/file4.txt
A  dirB/dirB-1/dirB-1-1/file6.txt
A  file7.txt
?? dirA/dirA-1/dirA-1-2/file2.html
?? dirB/dirB-1/dirB-1-1/file5.html


답변

이미 파일을 추적하고 있으며 파일을 변경 한 후 패턴에 따라 선택적으로 추가하려는 경우 --modified플래그를 사용할 수 있습니다

git ls-files --modified | grep '<pattern>' | xargs git add

예를 들어,이 커밋에 CSS 변경 사항 만 추가하려는 경우

git ls-files --modified | grep '\.css$' | xargs git add

참조 man git-ls-files이상의 플래그에 대한


답변

그냥 사용하십시오 git add *\*.java. 루트 디렉토리와 모든 서브 디렉토리에 모든 .java 파일이 추가됩니다.