2010-07-03 2 views
1

git에서 수신 후 후크를 만들었습니다. 후크는 화면에 메시지를 출력합니다. 메시지는 push를하는 git 클라이언트로 보내지고 다시 출력됩니다.어떻게하면 git에서 post-receive에 의해 반환 된 모든 줄에 나타나는 'remote :'메시지를 제거 할 수 있습니까?

모든 출력 줄 앞에 'remote :'텍스트를 제거하려면 어떻게해야합니까? 오히려 산만 해. (실제 상황을 보았 기 때문에 가능한 일이라는 것을 알고 있습니다. 어떻게 완료했는지 모르겠습니다.)

답변

3

참고 : 원격 시스템의 메시지를 로컬 시스템의 메시지로 오해하지 않으려면 접두어를 사용하는 것이 중요 할 수 있습니다 .

즉, 접두사를 끄는 방법은 없지만 모두 stderr에 기록됩니다. 당신은 git push의 stderr를 리디렉션/캡처/필터링하여 원하는 것을 할 수 있습니다.

git push ... 2>&1 | sed -e 's/^remote: //' 

그것은 파이프에 표준 출력 전송 및 stderr 고토에게 같은 장소를 만든다 :

일의 대략적인 방법은 다음과 같이 될 수 있습니다. 파이프의 다른 쪽 끝에서 sed은 조합 된 출력을 읽고 remote: 접두사를 삭제합니다. stdout 스트림에 remote: 접두사가 보이지 않을 것이므로이 값은 괜찮습니다. 이런 식으로 stdout과 stderr를 결합하는 것은 일반적으로 대화 형으로 사용할 수 있지만 (어쨌든 동일한 tty 장치를 사용하기 때문에) 자동화 된 환경 (예 : 스크립트)에서는 사용하지 않는 것이 좋습니다.

+0

+1 두 번째 음성은 "접두어를 제거하면 안됩니다. 중요한 의미가 있습니다." – Cascabel

+0

서버 측에서 처리 할 수 ​​있습니까? (heroku.com 않습니다) 그리고 메시지는 어쨌든 메시지가 원격에서 오는 것을 보여주기 위해 화살표로 들여 쓰여져 있습니다. – dkulchenko

+1

내가 알 수있는 한, Heroku가 보낸 상태 메시지는 Git 프로토콜 외부로 전송됩니다 (SSH 연결의 stderr를 통해 직접 전송, 즉 SSH_MSG_CHANNEL_EXTENDED_DATA/SSH_EXTENDED_DATA_STDERR 메시지). 이것을 복제하기 위해서 들어오는 SSH 연결은 stderr에 메시지를 생성 할 수있는 * git-receive-pack * (예 : 스크립트) 대신에 프로그램을 실행하게합니다. 이러한 프로그램은 stderr에 쓰기 전과 후에/git-receive-pack *을 실행해야합니다. –