2017-11-11 8 views
1

나는 코딩 기술이 거의 없거나 전혀없는 사람들이 자신의 컴퓨터에 앱을 설치, 실행 및 업데이트 할 수 있도록 내 앱용 업데이터를 해킹했습니다. 당신이 볼 수 있듯이내 repo에 변경 사항이 있는지 알려면이 도자기 Git 명령을 사용해야하지 않는 이유는 무엇입니까?

@echo off 
for /f %%i in ('call git status --porcelain') do set stash=%%i 
if not [%stash%] == [] (
    echo Stashing local changes... 
    call git add . 
    call git stash -q 
) 
echo Updating App... 
call git pull origin master 
if not [%stash%] == [] (
    echo Restoring local changes... 
    call git stash apply -q 
) 
echo Updating Dependencies... 
call npm update 
echo Done 
pause 

, 나는이 응용 프로그램은 은닉 할 필요가 로컬 변경 사항이 있는지 여부를 알려 git status --porcelain를 호출하고 있습니다 : 여기

는 Windows 명령 프롬프트를 위해 작성의 업의 예입니다 원격 마스터 브랜치를 당기기 전에.

이 명령은 추적하거나, 작업 디렉토리가 깨끗한 경우 아무것도을 반환하지 않습니다,하지만 로컬 변경 사항이있는 경우 항상 뭔가를 반환합니다.

도자기 명령을 사용하여 git에서 배관 작업을 수행하는 것이 좋지 않은 다른 게시물을 읽었지 만,이 경우에는 잘 작동하고 있는데 git status --porcelain 명령이 실행되는 이유가 표시되지 않습니다. 깨끗한 작업 디렉토리가있을 경우 을 반환하십시오.

내 질문은 : 이 특정 사용 사례에 도자기를 사용하는 것은 잘못 되었습니까? 그렇다면 왜?

보너스 : 이것에 관해 더 좋은 방법은 무엇입니까?

답변

1

실제로 git status 스위치를 --porcelain 스위치와 함께 사용하면 문제가 없습니다. 또한 문서를 들여다 보면 다음과 같이 설계된 방식대로 명령을 사용했음을 알 수 있습니다.

스크립트에 대해 구문 분석이 쉬운 형식으로 출력을 제공하십시오. 이것은 짧은 출력과 비슷한 이지만 Git 버전과 사용자 구성에 관계없이 안정적으로 유지됩니다. 자세한 내용은 아래를 참조하십시오. 여기

또 다른 옵션도 쉬운 구문 분석 돌아갑니다 출력 -s 스위치 (git status -s)를 사용하는 것입니다 있지만 향후 버전에 대해 동일한 방식으로 작동을 보장 할 수 없습니다.

git status의 특정 용도가 어떤 식 으로든 부정확합니다. 그것은 일을하고 안정적으로 이해하며 이해하기 쉽습니다. 도자기를 사용한 동등한 명령은 예를 들어, 수 : -t 스위치

git ls-files --exclude-per-directory=.gitignore --exclude-from=.git/info/exclude --others --modified -t 

그러나 git ls-files에서 문서 :

이 기능은 반되지 않습니다. 스크립팅 목적으로, git-status (1) - porcelain 및 git-diff-files (1) - 이름 상태는 거의 항상 이며, 대체로 보다 우수하며 사용자는 git-status (1) - short 또는 git-diff (1) -보다 사용자 친화적 인 대안을위한 이름 상태.

그럼 심지어 자식 설명서 git status 대안을 사용하는 것이 좋습니다 참조하십시오.

+0

그것은 계몽적이었습니다. 나는이 더 배관 위주의 시나리오에서 사용되도록 의도 된 '- porcelain'스위치를 만든 이유에 대해 여전히 혼란 스럽다. – Bango

+1

@Bango, 많은 자식 명령은'--porcelain' 스위치를 사용하여이 스위치를 사용할 때 안정적인 출력을 제공한다고 알려줍니다. – Opal

1

git status --porcelain은 도자기 명령이 아닙니다. 옵션의 이름은 오해의 소지가 있지만, 실제로는 "파스칼 스크립트에 사용하기에 적합하고 구문 분석하기 쉽고 안정적인 출력을 제공합니다"라는 의미입니다. 따라서 --porcelain은 "배관 명령으로 사용"을 의미합니다.

이미 다른 답변에서 말했듯이, 당신이하는 일에는 아무런 문제가 없습니다. --porcelain은 당신이하는 방식대로 사용하기위한 것입니다.