패턴별로 파일을 재귀적으로 추가합니다.
다른 디렉토리에 있는 패턴(또는 글로벌)별로 파일을 재귀적으로 추가하려면 어떻게 해야 합니까?
예를 들어, 다음과 같이 추가합니다.A/B/C/foo.java
그리고.D/E/F/bar.java
하나의 명령으로 (및 기타 여러 Java 파일):
git add '*.java'
유감스럽게도, 그것은 예상대로 작동하지 않습니다.
사용할 수 있습니다.git add [path]/\*.java
하위 디렉터리에서 Java 파일을 추가하려면,
예.git add ./\*.java
현재 디렉터리에 대해.
설명서에서:
모두의 콘텐츠를 추가합니다.
*.txt
아래의 파일Documentation
디렉터리 및 해당 하위 디렉터리:$ git add Documentation/\*.txt
별표에 유의하십시오.
*
이 예에서는 셸에서 인용합니다. 이 명령을 사용하여 하위 디렉터리의 파일을 포함할 수 있습니다.Documentation/
디렉토리입니다.
추가할 파일 중 일부가 아직 추적되지 않았다면 Sergio Acosta의 답변이 최선일 것입니다.만약 당신이 Git가 이미 알고 있는 파일로 당신 자신을 제한하고 싶다면, 당신은 결합할 수 있습니다.git-ls-files
필터 사용:
git ls-files [path] | grep '\.java$' | xargs git add
Git는 기본적으로 셸 문제이기 때문에 이것 자체를 수행하기 위한 어떤 멋진 메커니즘도 제공하지 않습니다. 주어진 명령에 대한 인수로 제공할 파일 목록을 어떻게 얻습니까?
와 함께zsh
실행할 수 있습니다.
git add "**/*.java"
그리고 당신의 모든 것*.java
파일이 재귀적으로 추가됩니다.
약간 엉뚱한 주제(특히 git 관련 항목은 아님)이지만 Linux/unix를 사용하는 경우 해결 방법은 다음과 같습니다.
find . -name '*.java' | xargs git add
또한 공백이 있는 경로가 필요한 경우:
find . -name '*.java' -print0 | xargs -0 git add
하지만 그것이 정확히 당신이 요청한 것이 아니라는 것을 압니다.
세르게이의 대답은 효과가 있습니다.
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 상태:
$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,pom}
발송처: https://stackoverflow.com/a/64210713/2586761
그냥 사용하기git add *\*.java
루트 디렉터리와 모든 하위 디렉터리에 모든 .java 파일이 추가됩니다.
아직 언급되지 않은 윈도우즈 명령줄 솔루션 추가:
for /f "delims=" %G in ('dir /b/s *.java') do @git add %G
다음을 기반으로 특정 문자열이 있는 파일만 추가하고 싶었습니다.git status
:
git status | grep string | xargs git add
그리고 나서 할 수 있었습니다.git commit -m 'commit msg
파일 제목에 "string"이 있는 변경된 모든 파일을 커밋합니다.
"git: 만약 당신이 당신의 경로 사양 글로빙을 적절하게 탈출하거나 따옴표로 묶는다면, 어떻게 내가 디렉토리 하위 트리의 모든 파일을 재귀적으로 추가할 수 있습니까?"'*.java'
), add), 면예그러, git add.'*.java'
Git 2.13(2017년 2분기)은 대화형 추가 기능을 개선했습니다.
제프 peff
킹()의 커밋 7288e12(2017년 3월 14일)를 참조하십시오.
(주니오 C 하마노에 의해 합병 -- -- 153e0d7, 2017년 3월 17일 커밋)
add --interactive
규확지않으로 경로 규격을ls-files
할 때, 가 제공한 정된파목로가면려먼수" " 자사가제경사확로다장니합을양한"로합니다.
ls-files
로 나온 로 " 런다음에 " 대로인 " 의수경 " 로을결 " 그합제 " 공록니 " 목과다 " 한런▁as "▁to▁of▁" " ▁the그▁and " 합에 " 의다니 " 공을로 " 제과로경다 "diff-index
그리고 "diff-files
".
경로 규격이 많은 경로로 확장되는 경우 다음 두 가지 문제 중 하나에 직면할 수 있습니다.
OS는 인수 목록의 크기에 대해 불평하고 실행을 거부할 수 있습니다.예:
$ (ulimit -s 128 && git add -p drivers) Can't exec "git": Argument list too long at .../git-add--interactive line 177. Died at .../git-add--interactive line 177.
바로그야에 .
linux.git
저장소 - "드라이버" 디렉터리에 약 20,000개의 파일이 있습니다(이 경우 수정되지 않음)."ulimit -s
Linux에서 그러한 거대한 경로 집합에 대해서도 문제를 보여주기 위해 트릭이 필요합니다.
다른 운영 체제는 훨씬 더 작은 제한을 갖습니다(예: OS X에서 5K 파일만 있는 실제 사례).
효과가 있을 때도 정말 느립니다.경로 규격 코드가 대량의 경로에 대해 최적화되지 않았습니다.다음은 제한이 없는 동일한 사례입니다.
$ time git add -p drivers No changes. real 0m16.559s user 0m53.140s sys 0m0.220s
우리는 건너뛰기를 통해 이를 개선할 수 있습니다.
ls-files
완전하게, 그리고 단지 diff 명령에 원래의 경로 사양을 공급합니다.
역사적으로 "가 지원하는 경로 지정 언어.diff-index
더 약했지만, 더 이상 그렇지 않습니다.
~/.gitconfig에 줄 바꿈
[alias] addt = !sh -c 'git ls-files | grep \"\\.$1*\" | xargs git add' -
과 같이 됩니다.git addt java
과 같이 하면 .git addt py
GNU make 파일에서 사용한 변형입니다.
.PHONY: docs
docs:
@echo docs
bash -c "if pgrep MacDown; then pkill MacDown; fi"
bash -c 'cat $(PWD)/HEADER.md > $(PWD)/README.md'
bash -c 'cat $(PWD)/COMMANDS.md >> $(PWD)/README.md'
bash -c 'cat $(PWD)/FOOTER.md >> $(PWD)/README.md'
bash -c 'pandoc -s README.md -o index.html'
bash -c "if hash open 2>/dev/null; then open README.md; fi || echo failed to open README.md"
#git add --ignore-errors *.md
git ls-files -co --exclude-standard | grep '\.md/$\' | xargs git
언급URL : https://stackoverflow.com/questions/2855140/recursively-add-files-by-pattern
'source' 카테고리의 다른 글
파이썬에서 "continue" 문을 사용하는 예는 무엇입니까? (0) | 2023.07.09 |
---|---|
Angular2 Types 스크립트에서 HTML 요소 읽기 전용 및 필수 속성을 변경하는 방법은 무엇입니까? (0) | 2023.07.09 |
git-gc를 얼마나 자주 사용해야 합니까? (0) | 2023.07.09 |
Mongobdb - 중첩된 배열 및 개체 쿼리 (0) | 2023.07.04 |
루비에서 정수를 16진수 문자열로 변환 (0) | 2023.07.04 |