힘내 : "추적되지 않은"파일 만 나열 (사용자 정의 명령)


339

git ls-files추적되지 않은 파일 만 표시 하는 것과 같은 명령을 사용하는 방법이 있습니까?

내가 묻는 이유는 다음 명령을 사용하여 삭제 된 모든 파일을 처리하기 때문입니다.

git ls-files -d | xargs git rm

추적되지 않은 파일과 비슷한 것을 원합니다.

git some-command --some-options | xargs git add

에 대한 -o옵션 을 찾을 수 git ls-files있었지만 무시 된 파일도 표시하기 때문에 원하는 것이 아닙니다. 또한 다음과 같이 길고 못생긴 명령을 내릴 수있었습니다.

git status --porcelain | grep '^??' | cut -c4- | xargs git add

여기서 사용할 수있는 더 나은 명령이 있어야합니다. 그렇지 않은 경우 사용자 정의 git 명령을 어떻게 만듭니 까?


왜 필요한지 자세히 설명해 주 git ls-files -d | xargs git rm시겠습니까?
takeshin

git notices가 누락 된 모든 파일을 제거합니다. 내 질문은 관련 작업을 수행하는 방법에 관한 것이 었습니다 .git이 현재 추적하지 않는 모든 파일을 추가하십시오. 일반적으로 코드 파일의 이름을 바꾸거나 결합 및 / 또는 분할 한 후에이 두 가지를 모두 수행합니다.
우리 모두 모니카

누락 된 경우 이미 삭제되지 않았습니까? 다른 곳에서 꺼내서 리모컨과 동기화하려고하지 않는 한 ... 나는 그것을 얻는 것 같아요.
Buttle Butkus

추적되지 않은 빈 폴더가 있으면 아무도 찾을 수없는 경우 모든 답변을 테스트했습니다.
kittygirl

@kittygirl이 맞습니다. git파일에서만 작동 하기 때문에 빈 폴더를 추적하는 방법이 없습니다. find . -type d -empty대신 시도하십시오 .
우리 모두 모니카

답변:


530

추적되지 않은 파일을 나열하려면 다음을 시도하십시오.

git ls-files --others --exclude-standard

출력을로 파이프 해야하는 경우 and를 xargs사용하여 공백을 생각하는 것이 좋습니다 .git ls-files -zxargs -0

git ls-files -z -o --exclude-standard | xargs -0 git add

추적되지 않은 파일을 추가하기위한 유용한 별칭 :

au = !git add $(git ls-files -o --exclude-standard)

편집 : 참조 : git-ls-files


7
완전한! !별칭 줄의 시작 부분에서 의미 하는 것은 무엇입니까 ?
우리 모두 모니카

@takeshin 부모 디렉토리 이름 만 얻는 방법? 하위 폴더가 아닙니다. 추적되지 않은 파일의 의미 : / P / a / files, / P / a / images, / P / a / / P /, ...-그냥 / P /를 나열하고 싶습니다
Dr.jacky

2
어떤 상황에서 별칭이 필요합니까? git add *동일한 작업을 수행합니다. 표준을 제외한 모든 추적되지 않은 파일을 추가합니다 (경로가있는 파일 .gitignore).
toinetoine

1
내 별칭이 repo의 모든 디렉토리에서 일관되게 작동하는 것을 선호합니다 (ls-files 명령은 현재 트리에서 변경된 파일 만 표시 함).[alias] lso = "!f() { cd $(git rev-parse --show-toplevel); git ls-files -o; }; f"
qneill

감사. 좋은 의견.
Darth Egregious

71

추적되지 않은 파일 만 제거하려면 다음을 수행하십시오.

git clean -df

x특별히 무시 된 파일도 포함하려면 추가 하십시오. 나는 하루 종일 많이 사용 git clean -dfx합니다 .

라는 스크립트를 작성하고 git-whatever경로에 넣으면 커스텀 자식을 만들 수 있습니다 .


추적되지 않은 모든 파일 을 추가 하는 것이 훨씬 일반적입니다 (예 : 이동 한 후). 어쨌든 사용자 정의 명령에 대한 팁을 주셔서 감사합니다. 그 메커니즘은 어디에 기록되어 있습니까?
우리 모두 모니카

5
그냥 git add -A하시거나 git add -u(어떤 의미가 있는지에 따라)
Dustin

1
귀하의 의견은 실제 답변입니다.
@Mike Lococo

2
"N"를 추가하여 건조 실행 및 "자식 깨끗한 -dfxn"
Charo 교수

50

git add -A -n당신이 원하는 것을 할 것입니다. -A의 REPO 모든 비 추적 파일을 추가 -n하게 그것을 dry-run추가가 수행되지 않고 상태 출력은 각각의 파일 목록 주어진다 것이 추가되었다합니다.


7
이것은 좋은 답변입니다! .gitignore일반적으로 원하는 파일의 파일은 제외 하지만 그렇지 않은 경우에는 제외됩니다 git add -fAn.
cdunn2001

1
이것은 가장 좋은 답변처럼 보입니다.
Rob Grant

1
이것이 가장 좋은 대답입니다. 사용자에게 수행 할 작업을 명시 적으로 알려주고 실제로 추가하기 전에 검토 할 기회를 제공합니다. 완전한. 감사!
digitguy

수정 된 파일도 나열됩니다.
Frank-Rene Schäfer

멋지지만 포장되어 add '$file'있습니다. 반면 git ls-files --exclude-standard -o출력은 나 빠지고 배관은 뜨겁습니다.
hyperpallium

28

허용되는 답변은 공간이있는 파일 이름에서 충돌합니다. 이 시점에서 alias 명령을 업데이트하는 방법을 잘 모르겠으므로 개선 된 버전을 여기에 넣으십시오.

git ls-files -z -o --exclude-standard | xargs -0 git add

나는 이것이 정답이라고 생각합니다. 왜냐하면 그것은 나중에 파일에 대한 작업 (git add와 같은)을 수행하기위한 각 파일의 경로를 제공하기 때문입니다.
Pablo Burgos

27

모든 것이 매우 간단합니다

추적되지 않은 모든 파일의 목록을 얻으려면 -u 옵션 (--untracked-files) 과 함께 git status 명령을 사용 하십시오.

git status -u

비 재귀 버전은 어떻습니까?
David

불행히도 .gitignore 파일을 통해 무시되는 파일도 나열됩니다.
Plouff

8
이것은 초기 커밋시 무시 된 파일을 보여준 유일한 대답이지만 명령 에 추가 --ignored해야했습니다.git status -u
DN

이것은 간단하고 훌륭합니다.
Eric Wang

1
또한의 쇼 파일을 수정했습니다. 따라서 질문에 대한 대답은 아닙니다 . 추적되지 않은 파일 표시합니다.
와일드 카드

6

추가 할 파일을 찾을 때. 의 결과 git show는 그렇게하지만 많은 다른 것들도 포함합니다. 다음 명령은 동일한 파일 목록을 가져 오지만 다른 항목은 모두없는 경우에 유용합니다.

 git status --porcelain | grep "^?? " | sed -e 's/^[?]* //'

파이프 라인에서 결합하여 특정 패턴과 일치하는 파일을 찾은 다음이를 파이핑 할 때 유용합니다 git add.

git status --porcelain | grep "^?? "  | sed -e 's/^[?]* //' | \
egrep "\.project$|\.settings$\.classfile$" | xargs -n1 git add

6

나는 오래된 질문을 알고 있지만 추적되지 않은 파일을 나열하는 관점에서 추적되지 않은 폴더를 나열하는 다른 파일을 추가 할 것이라고 생각했습니다.

git clean 작업을 -n (dry run)과 함께 사용하여 다음을 통해 제거 할 파일 (.gitignore 파일 포함)을 표시 할 수 있습니다.

git clean -xdn

이것은 추적되지 않은 모든 파일모든 폴더 를 표시하는 이점이 있습니다 . 매개 변수 :

  • x -추적되지 않은 모든 파일을 표시합니다 (git과 다른 사람들이 무시한 것을 포함하여 빌드 출력 등)
  • d -추적되지 않은 디렉토리 표시
  • n그리고 가장 중요한 것은! -드라 이런, 즉 실제로 아무것도 삭제하지 말고 깨끗한 메커니즘을 사용하여 결과를 표시하십시오.

를 잊어 버렸을 때와 같이하는 것이 안전하지 않을 수 있습니다 -n. 그래서 나는 보통 git config에서 별칭을 지정합니다.


2

내가 확인한 모든 이전 답변에는 커밋 할 파일도 나열됩니다. 여기 아직 repo에 있지 않고 적용되지 않는 파일 만 나열하는 간단하고 쉬운 솔루션이 .gitignore있습니다.

git status --porcelain | awk '/^\?\?/ { print $2; }'

또는

git status --porcelain | grep -v '\?\?'

이 아니라 자신의 이름에 공백이있는 파일을 작동하지 않는 것
SSC를

-2

나는 이것이 원래 포스터와 의도가 똑같을 것이라고 생각합니다.

git add .


2
당신이 할 때마다 git/svn add .새끼 고양이가 죽습니다.
Nakilon

허, 당신은 당신의 원격 지점의 로컬 사본에 뭉게가있는 경우에만;) 로컬 지점을 만들고 당신은 git add .불의로 할 수 있습니다 !
Tim Fulmer

@Nakilon, 이것이 .gitignore제대로 구성하는 이유 입니다. 그래도 피하는 것이 좋습니다 git add .. 더 git add -u좋습니다.
와일드 카드
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.