sourcetip

(셸 종료 코드로) 파일이 추적되는지 여부를 확인하는 방법은 무엇입니까?

fileupload 2023. 6. 2. 21:16
반응형

(셸 종료 코드로) 파일이 추적되는지 여부를 확인하는 방법은 무엇입니까?

일부 파일을 실행하여 파일이 추적되고 있는지 확인할 수 있는 방법이 있습니까?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.

두 가지 방법이 있습니다.

  1. git 명령 사용:

    git config --global alias.check-file <아래 명령>

  2. 편집~/.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 --onelinegit ls-filesgit 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

반응형