[git] git : 존재하지 않는 모든 파일을 무시하는 방법?

자식 리포지토리에서 추적되지 않은 모든 파일과 폴더를 무시하는 편리한 방법이 있습니까?
(에 대해 알고 .gitignore있습니다.)

따라서 git status다시 깨끗한 결과를 제공 할 것입니다.



답변

이미 말했듯이 상태에서 제외하려면 다음을 사용하십시오.

git status -uno  # must be "-uno" , not "-u no"

대신 현재 추적되지 않은 파일을 영구적으로 무시하려면 프로젝트 루트에서 다음을 시작하십시오.

git status --porcelain | grep '^??' | cut -c4- >> .gitignore

이후의 모든 호출 git status은 해당 파일을 명시 적으로 무시합니다.

업데이트 : 위의 명령에는 약간의 단점이 있습니다. .gitignore아직 파일 이 없으면 gitignore가 자체를 무시합니다! 이는 파일 이 실행 .gitignore되기 전에 파일 이 생성되기 때문에 발생합니다 git status --porcelain. 따라서 .gitignore아직 파일 이 없으면 다음을 사용하는 것이 좋습니다.

echo "$(git status --porcelain | grep '^??' | cut -c4-)" > .gitignore

이 완료 서브 쉘 생성 하기 전에.gitignore 파일이 만들어집니다.

명령 설명 내가 많은 투표를 받고있을 때 (감사합니다!) 나는 그 명령을 조금 더 잘 설명 할 것이라고 생각합니다.

  • git status --porcelain대신 사용 git status --short하기 때문에 수동 상태가 “스크립트 쉬운 구문 분석 형식으로 출력을 지정합니다.이 짧은 출력과 비슷하지만 자식 버전에서 안정적인 관계없이 사용자 구성에 남아있을 것이다.” 따라서 파싱 성과 안정성이 모두 있습니다.
  • grep '^??'git status manual?? 에 따르면 추적되지 않은 파일에 해당하는로 시작하는 행만 필터링 합니다.
  • cut -c4- 모든 줄의 처음 3자를 제거하여 추적되지 않은 파일의 상대 경로를 제공합니다.
  • |기호는 파이프 다음 명령의 입력 이전 명령의 출력을 전달;
  • >>>기호는 리디렉션 연산자 파일에 덮어 쓰기 또는 이전 명령의 출력을 추가 / 각각 새로운 파일을 생성한다.

및 대신에 사용sed 하는 것을 선호하는 사람들을위한 또 다른 변형 다음 과 같은 다른 방법이 있습니다.grepcut

git status --porcelain | sed -n -e 's/^?? //p' >> .gitignore


답변

이러한 파일을 영구적으로 무시하려면 파일을 추가하는 간단한 방법 .gitignore은 다음과 같습니다.

  1. 자식 트리의 루트로 변경하십시오.
  2. git ls-files --others --exclude-standard >> .gitignore

이것은 추적되지 않은 디렉토리 내의 모든 파일을 열거하며, 원하는 디렉토리 일 수도 있고 아닐 수도 있습니다.


답변

매뉴얼 에서 찾았습니다

mode 매개 변수는 추적되지 않은 파일 처리를 지정하는 데 사용됩니다. 선택 사항입니다. 기본값은 모두이며, 지정된 경우 옵션에 붙어 있어야합니다 (예 : -uno는 아니지만 -uno).

git status -uno


답변

두 가지 방법:

git-status에 “-uno”인수를 사용하십시오. 예를 들면 다음과 같습니다.

[jenny@jenny_vmware:ft]$ git status
# On branch ft
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#       foo
nothing added to commit but untracked files present (use "git add" to track)
[jenny@jenny_vmware:ft]$ git status -uno
# On branch ft
nothing to commit (working directory clean)

또는 파일과 지시문을 .gitignore에 추가 할 수 있으며,이 경우 절대 표시되지 않습니다.


답변

-u no스테이지되지 않은 파일도 표시되지 않습니다. -uno원하는대로 작동하고 스테이지되지 않은 상태로 표시되지만 추적되지 않은 상태로 숨 깁니다.


답변

OS 와 같은 Unix를 사용하지 않는 경우 PowerShell을 사용하여 Windows에서 작동 합니다.

git status --porcelain | ?{ $_ -match "^\?\? " }| %{$_ -replace "^\?\? ",""} | Add-Content .\.gitignore

그러나 .gitignore파일에는 빈 줄이 새로 있어야합니다. 그렇지 않으면 내용이 있더라도 마지막 줄에 텍스트가 추가됩니다.

이것은 더 나은 대안이 될 수 있습니다.

$gi=gc .\.gitignore;$res=git status --porcelain|?{ $_ -match "^\?\? " }|%{ $_ -replace "^\?\? ", "" }; $res=$gi+$res; $res | Out-File .\.gitignore


답변

당신은 할 경우 많은 비 추적 파일을, 그리고 “싶지 않아 gitignore, 그들 모두”때문에,주의 자식 1.8.3 (2013 년 4 월 22D) , git status을 언급 할 것이다 --untracked-files=no당신이에 해당 옵션을 추가하지 않은 경우에도를 처음!

git status“은 사용자에게 --untracked=no옵션이 너무 오래 걸릴 때 옵션 을 사용하는 것을 제안합니다 .