자동화 된 도구-웹 프런트 엔드, CI 시스템에서 git 저장소를 복제 할 때 때때로 git clone 호출은 사용자 이름과 비밀번호를 묻는 프롬프트를 표시합니다 (예 : 존재하지 않는 Github 저장소를 복제하거나 ssh 키가없는 새 노드에서) ).
서버 프로세스가 사용자 이름과 암호를 제공하기를 기다리는 대신 git을 실패하게 만드는 방법 (예를 들어 적절한 오류 메시지 및 종료 코드가있는)은 어떻게합니까?
자동화 된 도구-웹 프런트 엔드, CI 시스템에서 git 저장소를 복제 할 때 때때로 git clone 호출은 사용자 이름과 비밀번호를 묻는 프롬프트를 표시합니다 (예 : 존재하지 않는 Github 저장소를 복제하거나 ssh 키가없는 새 노드에서) ).
서버 프로세스가 사용자 이름과 암호를 제공하기를 기다리는 대신 git을 실패하게 만드는 방법 (예를 들어 적절한 오류 메시지 및 종료 코드가있는)은 어떻게합니까?
답변:
git 버전 2.3에는 환경 변수가 있습니다. 환경 변수 는 자격 증명을 요구하지 않도록 GIT_TERMINAL_PROMPT
설정됩니다 0
.
man git
(git 버전으로 업데이트 한 후 2.3
) 또는 github의이 블로그 게시물에서 자세한 정보를 얻을 수 있습니다 .
예 :
git clone https://github.com/some/non-existing-repo
사용자 이름 및 비밀번호를 묻습니다GIT_TERMINAL_PROMPT=0 git clone https://github.com/some/non-existing-repo
사용자 이름 및 비밀번호를 묻지 않고 실패합니다ssh 인증을 사용 중이고 Linux에서 ssh 명령 대체를 작성하여이를 사용 불가능하게 할 수 있습니다.
다음을 사용하여 "sshnoprompt.sh"라는 파일을 작성하십시오.
ssh -oBatchMode=yes $@
이 파일을 실행 파일로 만드십시오 chmod +x sshnoprompt.sh
그런 다음 git을 시작할 때 :
GIT_SSH="sshnoprompt.sh" git clone foo@dummyserver:not_a_repo
또한 대화 형 git 프롬프트 나 질문을 허용하지 않습니다. 사용자에게 아무것도 묻지 않아야합니다.
자식 버전 1.8.3.1에서 작업;
git clone -c core.askPass $echo url/or/path/to/git/repo
core.askPass
자격 증명 처리 제어를 위에서 언급 한 프로그램으로 전달하면 구성이 작동합니다. 그러나 $echo
출력 이외의 작업을 수행 할 수 없으므로 복제 시도가 즉시 실패하고 각 bash 리디렉션이 적용됩니다. 이 코드는 git 리포지토리가 비공개 인 경우에만 호출되며 특정 리포지토리에 대한 인증이 실패했다는 오류 출력을 파이프합니다. https://github.com/git/git
알고있는 개인 저장소에 대해 공용 저장소에서 이를 테스트 할 수 있습니다 .
거래를 단화시키기 위해 echo
처음부터 같은 프로그램을 참조 할 필요조차 없습니다 . -c core.askPass
코드가 자격 증명 처리를 오프로드하는 프로그램을 알지 못하므로 리포지토리가 비공개 인 경우에도 git 구성 을 전달 하지 않고 계속해서 git 구성 을 실패하게됩니다. 이것은 여기에 언급 된 다른 방법보다 더 오래되고 간단한 방법이지만 이전 버전의 git에서 동일한 효과가 있는지는 알 수 없습니다.
$echo
변수 참조는 (설정되지 않음) 빈 문자열로 확장되므로 완전히 의미가 없습니다. echo
거기에 달러 기호 를 넣지 않으면 저장소 위치로 해석되므로 올바르지 않습니다. 이어야 -c core.askPass=echo
합니다.
git을 실행하는 방법에 따라 stdin 또는 stdout을 터미널에 연결되지 않도록 리디렉션하면 git에서 세부 정보를 묻는 메시지가 표시되지 않고 오류가 발생합니다.
또한 웹 서비스에 오류 (또는 최소한 로그)를 표시 할 수 있습니다.
</dev/null
와 nohup .. &
작동하지 않습니다.