2011-10-11 2 views
0

switch SVN에서 라이브 서버로 최신 코드가 변경되어 일부 방목벽이 파일을 수정했다는 것을 알기 만하면됩니다. 직접 서버에 지금 다섯 PHP 스크립트를 충돌로 표시 한 사이트가 다운그리고 당신은 당신이 롤백 때문에 수동으로 모든 충돌을 해결해야했기 때문에 저녁 식사를 위해 지각에 대한 귀하의 아내 호통 얻을 의문의 여지가있다.PHP가 SVN 충돌을 무시하도록 확장 기능

충돌 파일을 발견했을 때 unexpected T_SL의 구문 분석 오류로 죽지 않을 PHP 확장이 있지만 모든 충돌의 작업 복사본 버전 만 사용하여 구문 분석하면 PHP가 멋지다고 생각합니다.

<<<<<<< .mine 
changes_my_stupid_coworker_made(); // This would be executed 
======= 
my_important_changes(); // This would NOT be executed 
>>>>>>> .r9 

비슷한 효과가있는 확장 프로그램이나 사용자가 있습니까?

+0

필자는 이것이 매우 복잡한 플러그인으로 상상할 수있을 것입니다. 문제가 발생하는 동안 라이브 환경에 대한 액세스 권한을 모든 사용자에게 부여하지 않아도되지만, 실제 환경을 편집해야하는 경우 지옥을 피할 수 있습니다. 버전 관리 외부에서 워크 플로우에서 뭔가 잘못하고있는 것 같아 ... – sg3s

+0

아무도 라이브 환경에서 아무 것도 만져서는 안되며, 우리의 워크 플로우는 매우 강력한 이유없이이를 수행하는 것을 엄격히 금지합니다. 그럼에도 불구하고, 그것은 "어쩔 수없는 이유"의 정의가 사람마다 크게 다르기 때문에 발생할 수 있습니다. – Kaivosukeltaja

+0

직장 동료가 "jenga"방지 패턴을 사용 중입니다. 이에 대한 정보는 [The Daily WTF : Release management right] (http://thedailywtf.com/Articles/Release-Management-Done-Right.aspx)를 참조하십시오. Subversion을 적용하려면 JB Nizet의 SVN 내보내기 사용 제안을 사용하고 서버의 파일을 덮어 쓰도록 설정하십시오. 누군가의 작업이 손실 되었습니까? 망할 놈들은 그 과정을 지키지 않았다. 상황이 정말 급한 경우 '태그가 지정된'지점의 소스를 수정하고 프로젝트 관리자에게 혼란을 정리하도록 알립니다 (즉, 새 태그가 필요하며 이전 태그는 더 이상 "깨끗한"것이 아닙니다). – JBert

답변

3

이것은 실제로 문제를 해결하는 최악의 방법 일 것입니다.

  • 누구도 서버에서 직접 파일을 편집하도록 허용하지 마십시오. 파일을 읽기 전용으로 만들 수 있습니다 (또는 범인이 해고 될 수 있음)
  • SVN 저장소에서 직접 서버를 업데이트하지 마십시오 : 작업 복사본을 업데이트하고이 작업 복사본에 대한 모든 유닛 및 통합 테스트를 실행 한 다음 태그를 지정하십시오 수정본을보고 서버로 내보내기

사람들이 올바르게 작동하지 않으면 더 이상 작동하지 않게하십시오.

+0

이미 개정판에 태그를 추가하고 업데이트 프로세스에서 사용하고 있지만 서버에 로컬 변경 사항이있는 경우에도 충돌 할 수 있습니다. 통합 테스트 환경에서 변경 사항을 테스트 할 때도 발견 할 수 없습니다. 'svn switch'도 파일에 접근 할 수 없기 때문에 파일에 대한 쓰기 권한을 허용해야합니다. – Kaivosukeltaja

+0

서버가 작업 복사본의 파일을 제공하지 않도록하십시오. 제한된 파일 액세스 권한으로 내 보낸 작업 복사본의 파일을 제공하도록합니다. –

0

라이브 환경 업데이트를 강제 실행하여 문제가 발생할 수 있지만 (이전 주석 참고) 충돌이 일어나지 않도록 할 수 있습니다. 거기에서 버전 제어 외부의 실제 환경을 변경하지 않아도됩니다. 우리는 모든 개발자가 실제 환경을 업데이트하는 방법을 확인했다

svn up --accept theirs-full 

내 머리 위로 아웃

은 매우 엄격합니다. 실제 서버에서는 명령 줄을 통해 업데이트 할 수 없지만 서버에 프로젝트를 구성 할 수있는 중앙 스크립트가 있으면 스크립트를 통해 업데이트 명령을 제공 할 수 있습니다. 스크립트는 우선 diff를 수행하여 충돌을 확인하고 아무 것도 잘못되지 않으면 업데이트하고 여러 사람과 프로젝트 책임자 인 cmdlead에게 cmd 출력이 포함 된 전자 메일을 보냅니다.

굉장히 깔끔하고 끔찍한 실수 나 늦은 밤을 막아줍니다.