다른 디렉토리에있는 패턴 (또는 glob)별로 파일을 재귀 적으로 추가하려면 어떻게합니까?
예를 들어, 하나의 명령으로 A/B/C/foo.java
및 D/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 파일이 추가됩니다.