(셸 종료 코드로) 파일이 추적되는지 여부를 확인하는 방법은 무엇입니까?
일부 파일을 실행하여 파일이 추적되고 있는지 확인할 수 있는 방법이 있습니까?git
명령 및 종료 코드 확인?
즉, git 추적은 파일입니까?
시도:
git ls-files --error-unmatch <file name>
파일이 추적되지 않으면 1로 종료됩니다.
콘솔을 오류 메시지로 혼란스럽게 만들고 싶지 않은 경우
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
}
편집
bash에서 git을 사용해야 한다면 다음이 있습니다.--porcelain
옵션:
--비공식적인
출력을 안정적이고 구문 분석하기 쉬운 스크립트 형식으로 제공합니다.현재 이것은 --short output과 동일하지만 이후에는 변경되지 않으므로 스크립트에 안전합니다.
출력은 다음과 같습니다.
> 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
서류철에git에 의해 추적되지 않으면 오류가 인쇄됩니다.
PS$> git status foo.txt
error: pathspec 'foo.txt' did not match any file(s) known to git.
"잘못된" 종료 코드를 제공하는 git 명령어는 모르겠지만 git-log 또는 git-ls-files와 같이 추적되지 않는 파일에 대해 출력을 제공하지 않는 git 명령어를 사용하는 것이 쉬운 방법인 것 같습니다.그렇게 하면 구문 분석을 수행할 필요가 없습니다. grep과 같은 다른 간단한 유틸리티를 사용하여 출력이 있는지 확인할 수 있습니다.
예를들면,
git-ls-files test_file.c | grep.
파일이 추적되면 0 코드로 종료되지만 파일이 추적되지 않으면 종료 코드는 1입니다.
사용자 지정 별칭을 사용하는 것이 좋습니다..gitconfig
.
두 가지 방법이 있습니다.
git 명령 사용:
git config --global alias.check-file <아래 명령>
편집
~/.gitconfig
별칭 섹션에 이 줄을 추가합니다.[filename] check-file = "!filename { if [$# -eq 0 ]; 그 다음에 'Filename missing!'을 에코합니다; 그렇지 않으면 tracked=$(gits-files ${1}); 만약 [-z ${filename}]); 그 다음에 'File not tracked'를 에코합니다; 그렇지 않으면 'File tracked'를 에코합니다; fi; fi;"
명령(1)을 실행하거나 파일(2)을 저장하면 다음과 같이 테스트할 수 있습니다.
$ git check-file
$ Filename missing
$ git check-file README.md
$ File tracked
$ git check-file foo
$ File not tracked
용사를 git log
이에 대한 정보를 제공합니다.파일이 git에서 추적되는 경우 명령에 일부 결과(로그)가 표시됩니다.그렇지 않으면 비어 있습니다.
예를 들어 파일이 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
....
....
파일이 Git 추적되지 않으면,
root@user-ubuntu:~/project-repo-directory# git log src/../somefile.js
root@user-ubuntu:~/project-repo-directory#
그냥 내 2센트야.
git ls-files | grep -x relative/path
relative/path
를 눌러 쉽게 결정할 수 있습니다.tab
자동 분해 셸 내에 있습니다. 가| wc -l
출력을 1 또는 0으로 합니다.
사용하려고 합니다.
git ls-files --error-unmatch <file name>
을 사용하는 subprocess.run()
해당 체크아웃 외부에서 실행되지만 다른 git 저장소의 체크아웃에서 실행됩니다.입니다. 파이처있변중는입다그니.git ls-files
올바른 리포지토리에서 실행됩니다.이것은 스크립트를 실행하는 경우에는 작동하지만 저장소 외부에 오류 파일이 있는 다른 리포지토리의 git-hook에서 스크립트를 실행하면 실패합니다.이는 명령이 파일이 있는 gitrepo 대신 스크립트가 있는 gitrepo에서 실행되기 때문입니다.gits-files의 동작을 변경할 수 있는 일종의 환경 변수나 Git 저장소를 지정하는 방법을 알고 계십니까?git ls-files
파일 목록을 읽어야 합니까?.
if git rev-parse -q --verify :path/to/file >&-
then echo it\'s tracked
else echo it\'s not
fi
나는 더 좋습니다git log -1 --oneline
git ls-files
git log 명령은 디렉터리를 통과하지 않기 때문에 확인할 경로가 파일인지 디렉터리인지에 관계없이 출력이 유사합니다.
은 다은의샘니다입출력플의 샘플 입니다.git ls-files
:
vinegupt@bhoscl88-04(/imsgit_local/work/vinegupt/ims_21.8/ims_oam/MT)$ git ls-files untracked-file # Untracked file shows no output
vinegupt@bhoscl88-04(/imsgit_local/work/vinegupt/ims_21.8/ims_oam/MT)$ git ls-files form/data.json # tracked file shows its name again
form/data.json
vinegupt@bhoscl88-04(/imsgit_local/work/vinegupt/ims_21.8/ims_oam/MT)$ git ls-files form # For directory entire directory is traveresed
form/Traffic_Params_2M_IS_cont_GVolte_EATF.xls
form/data.json
에 대한 샘플 :git log -1 --oneline
:
vinegupt@bhoscl88-04(/imsgit_local/work/vinegupt/ims_21.8/ims_oam/MT)$ git log -1 --oneline untracked-file # Untracked file shows no output
vinegupt@bhoscl88-04(/imsgit_local/work/vinegupt/ims_21.8/ims_oam/MT)$ git log -1 --oneline form/data.json # tracked file shows one-line output
e8e9e0f CONTAINERS-767 MT and release change for 21.8
vinegupt@bhoscl88-04(/imsgit_local/work/vinegupt/ims_21.8/ims_oam/MT)$ git log -1 --oneline form # Only directory info is given no traversal
e8e9e0f CONTAINERS-767 MT and release change for 21.8
언급URL : https://stackoverflow.com/questions/2405305/how-to-tell-if-a-file-is-git-tracked-by-shell-exit-code
'sourcetip' 카테고리의 다른 글
Ruby on Rails 콜백, :before_save와 :before_create의 차이점은 무엇입니까? (0) | 2023.06.02 |
---|---|
이 요청은 이 작업을 수행할 권한이 없습니다.애저블롭클라이언트 (0) | 2023.06.02 |
PostgreSQL: psql 명령을 사용하여 Postgres 인스턴스에 원격 연결 (0) | 2023.06.02 |
UI 텍스트 필드를 편집할 때 키보드를 해제하는 방법 (0) | 2023.06.02 |
VB.NET의 배열에서 항목을 삭제하려면 어떻게 해야 합니까? (0) | 2023.06.02 |