답변:
시험:
git ls-files --error-unmatch <file name>
파일을 추적하지 않으면 1로 종료됩니다
--error-unmatch
옵션 을 넣어야 오류가 발생합니다. 어떻게 든 옵션은 그 뒤에 오는 파일 이름에만 적용됩니다.
--
) 나타날 때 --error-unmatch
다른 (인덱스가 아닌) 파일 이름으로 취급되며 효과가없는 것 같습니다.
git ls-files | grep <PATTERN>
? 예 :git ls-files | grep Main.h
오류 메시지로 콘솔을 복잡하게 만들지 않으려면 다음을 실행할 수도 있습니다.
git ls-files file_name
그런 다음 결과를 확인하십시오. git이 아무것도 반환하지 않으면 파일이 추적되지 않습니다. 추적되면 git은 파일 경로를 반환합니다.
이 스크립트는 스크립트와 같은 스크립트 (예 : PowerShell)로 결합하려는 경우에 유용합니다.
$gitResult = (git ls-files $_) | out-string
if ($gitResult.length -ne 0)
{
## do stuff with the tracked file
}
file_name
정확히 일치해야 한다고 생각 하지만 (전체 경로 + 파일 이름) 와일드 카드와 함께 사용할 수 있습니다.git ls-files *foo.rb
편집하다
bash에서 git을 사용해야하는 경우 다음과 같은 --porcelain
옵션이 있습니다 git status
.
-도자기
스크립트에 대해 안정적이고 구문 분석이 쉬운 형식으로 출력을 제공하십시오. 현재 이것은 짧은 출력과 동일하지만 향후 변경되지 않으므로 스크립트에 안전합니다.
출력은 다음과 같습니다.
> git status --porcelain
M starthudson.sh
?? bla
또는 한 번에 하나의 파일 만 수행하는 경우 :
> git status --porcelain bla
?? bla
기발한
하다:
git status
업데이트 된 파일과 추적되지 않은 파일을 나타내는 보고서가 표시됩니다.
당신 bla.sh
은 추적 및 수정되고 newbla
추적되지 않는 것을 볼 수 있습니다 :
# On branch master
# Changed but not updated:
# (use "git add <file>..." to update what will be committed)
#
# modified: bla.sh
#
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
# newbla
no changes added to commit (use "git add" and/or "git commit -a")
git status --porcelain
당신이 스크립트에 의해 구문 분석 출력 할 필요가 링크 된 문서를 살펴 그것이 다른 유용한 옵션 보여줄 경우 당신의 친구입니다
git status --porcelain error: unknown option
도자기 '버전은 1.6.0 :-)입니다
git status
파일에서 실행 해보십시오 . git에서 추적하지 않으면 오류가 인쇄됩니다.
PS$> git status foo.txt
error: pathspec 'foo.txt' did not match any file(s) known to git.
git status trackedfile
하면 종료 코드 1 (0이 유용 할 것으로 예상 됨)이 표시되지만 출력에서 "오류 :"를 표시하지 않습니다. 오히려 문자열 출력보다 종료 코드를 구문 분석하고 싶습니다.
.gitignore
$ git status notthere
:On branch master nothing to commit, working directory clean
나는 당신 에게 사용자 정의 별칭 을 제안 합니다 .gitconfig
.
당신은해야 할 길 :
1) git 명령으로 :
git config --global alias.check-file <command>
2) ~/.gitconfig
별칭 섹션에서이 줄을 편집 하고 추가하십시오.
[alias]
check-file = "!f() { if [ $# -eq 0 ]; then echo 'Filename missing!'; else tracked=$(git ls-files ${1}); if [[ -z ${tracked} ]]; then echo 'File not tracked'; else echo 'File tracked'; fi; fi; }; f"
명령 (1) 또는 저장된 파일 (2)을 시작하면 작업 공간에서 다음을 테스트 할 수 있습니다.
$ git check-file
$ Filename missing
$ git check-file README.md
$ File tracked
$ git check-file foo
$ File not tracked
를 사용 git log
하면 이에 대한 정보가 제공됩니다. 파일이 git에서 추적되면 명령에 일부 결과 (로그)가 표시됩니다. 그렇지 않으면 비어 있습니다.
예를 들어 파일이 자식 추적 인 경우
root@user-ubuntu:~/project-repo-directory# git log src/../somefile.js
commit ad9180b772d5c64dcd79a6cbb9487bd2ef08cbfc
Author: User <someone@somedomain.com>
Date: Mon Feb 20 07:45:04 2017 -0600
fix eslint indentation errors
....
....
파일이 자식 추적되지 않으면
root@user-ubuntu:~/project-repo-directory# git log src/../somefile.js
root@user-ubuntu:~/project-repo-directory#
내 두 센트 :
git ls-files | grep -x relative/path
여기서 relative/path
용이하게 가압에 의해 결정될 수있다 tab
자동 완성 쉘 내에. | wc -l
1 또는 0 출력을 얻으려면 추가 를 추가하십시오 .
grep
옵션 을 추가해야합니다 --fixed-strings
.