우리 팀원 중 일부는 git push를 수행하고 빌드가 작동하지 않기 때문에 빌드를 중단하지만 푸시하기 전에 모든 로컬 수정 및 추적되지 않은 파일을 git에 맡기는 것을 잊어 버렸습니다.로컬 수정 사항이 발견되면 (untracked 파일 포함) git push를 방지하려면 어떻게해야합니까?
은 내가 시간 동안 문서 부어 정도 오늘 아무것도 내장 찾을 수 없습니다 ...이 문제를 방지하고자.
는 사람이 어떤 솔루션이 있습니까?
우리 팀원 중 일부는 git push를 수행하고 빌드가 작동하지 않기 때문에 빌드를 중단하지만 푸시하기 전에 모든 로컬 수정 및 추적되지 않은 파일을 git에 맡기는 것을 잊어 버렸습니다.로컬 수정 사항이 발견되면 (untracked 파일 포함) git push를 방지하려면 어떻게해야합니까?
은 내가 시간 동안 문서 부어 정도 오늘 아무것도 내장 찾을 수 없습니다 ...이 문제를 방지하고자.
는 사람이 어떤 솔루션이 있습니까?
pre-push
후크를 사용할 수 있습니다 (git 1.8.2 이후).
프리 푸시 후크는 git status
의 종료 코드를 확인하고 git status
이 0이 아닌 경우 0 (푸시 확인)을 반환하고 그렇지 않으면 1 (푸시를 허용하지 않음)을 반환 할 수 있습니다.
git-status
에 대한 매뉴얼 페이지 말한다 : 인덱스 파일과 현재 HEAD 커밋 사이에 다른 어떤 경로가없는 경우
명령 종료 (즉, 커밋 자식을 실행하여 커밋 아무것도 없다) 0이 아닌 상태.
git 1.8.2 이상으로 생성 된 모든 repo는 .git/hooks
디렉토리에 pre-push.sample
이되며 이는 정책을 구현하는 데 유용한 시작점입니다. 여기에 pre-push
후크를 사용하는 더 좋은 예가 있습니다 : http://blog.ittybittyapps.com/blog/2013/09/03/git-pre-push/
후크가 업스트림 저장소에서 실행되지 않습니다. 각 복제본은 정책을 실행하기 위해이 훅을 설치해야합니다. (후크는 저장소의 일부로 복제되지 않습니다 .git에 의해 후크가 실행되므로 개발자의 컴퓨터에서 악성 코드가 실행되는 것을 방지합니다. 악성 코드는 대신 Makefile이나 스크립트를 구성해야합니다. 개발자는 보지 않고 실행합니다.)
'pre-push' 훅이 아닌가요? – Glyph
@ 글리프 - 감사합니다! 'pre-push'가 git 1.8.2에 추가되었으므로 나의 대답이 시대에 뒤 떨어진 것입니다. 관심있는 사람들에게 유용한 정보가 있습니다. http://blog.ittybittyapps.com/blog/2013/09/03/git-pre-push/ –
various hooks (pre-receive, 나는 믿습니다)을 사용하여 푸시가 빌드를 중단하고 거부하는지 확인할 수 있습니다. 그 외에도 개발자에게 커밋 또는 푸시 작업을 수행하기 전에 git status
을 실행하도록 알려야합니다.이 작업은 엄청나게 합당한 규칙으로 이러한 문제를 방지합니다.
변경 사항을 자동으로 추가하려면 -a
플래그를 사용하는 것이 좋습니다. git-commit
man page에서 :
당신이 영향을받지 않습니다에 대한 자식을 자동으로 단계 수정 및 삭제 된 파일 만 새 파일 말하지 않았다하는 명령을 알려주십시오.
추적되지 않은 파일을 추가하는 git commit
에 대한 플래그가없는 것으로 보입니다. 커밋하기 전에 git add .
을 기억한다는 것은 내가 생각할 수있는 최선의 해결책이다.
"git add"를 기억하십시오. 명령이 실행되는 것과 같거나 그 아래에있는 파일 만 추가합니다. –
쉘 또는 git config에 기본 push 명령을 git 상태를 먼저 수행하고 "working directory clean"을 확인하는 사용자 정의 스크립트로 대체하는 별명을 넣을 수 있습니까? 덮어 쓰기 푸시가 가능한지, 아니면 실제로 푸시를 호출 할 수 없게 만들지 모르겠다. 내 머리 꼭대기에있는 아이디어에요. 그래서 실제로 작동하는지 전혀 모르겠습니다.
별칭을 사용하여 내장 명령을 재정의 할 수 없습니다. . 쉘 별명은 공백을 포함 할 수 없기 때문에 명령을 직접 작성하는 것이 좋습니다. – Cascabel
필자의 메인 저장소로 이동하기 전에 로컬 빌드에 개미 대상을 추가하는 작업이 끝났습니다 ... 여기에 대상이 있습니다 ...다른 누군가가 올바른 방향으로 나아갈 단계를 찾고 있었다면
답장을 보내 주신 모든 분들께 감사드립니다.
<target name="git-status-check">
<echo>Performing git working directory check for local modifications or untracked files.</echo>
<exec executable="git" failifexecutionfails="true"
outputproperty="git.check">
<arg value="status"/>
</exec>
<echo>${git.check}</echo>
<propertyregex property="dirty.working.dir" input="${git.check}" regexp="working directory clean"
select="\1" casesensitive="false" />
<fail message="Git status reports that you have local modifications or untracked changes in your working dir... did you forget to commit these changes? ${line.separator} ">
<condition>
<not>
<isset property="dirty.working.dir" />
</not>
</condition>
</fail>
<echo>Git status reported a clean working dir continuing build...</echo>
</target>
내 대답이 도움이 되었습니까/답 했습니까? –
당신은 매트의 대답을 받아 들여야합니다 ...이 질문을 고려할 때 특히 도움이되지는 않습니다. (구글과 Matt의 코멘트는 엄청 도움이되었습니다) –
6 년 전 – Clintm
개발자는 더 신중하게 이야기합니까? 공구가 항상 해결책은 아닙니다. –
git repos에 색을 지정하고 개발자에게 "git add"에 대해 알려줍니다. "git status"와 "git add -A" –