2014-05-12 2 views
3

동일한 문제에 대해 여러 구현을 테스트하고 싶습니다. 예를 들어 "X1"및 "X2"구현에서 문제/코드 부분 "X"가 발생하고 "Y1", "Y2"및 "Y3"구현에서 문제 "Y"가 발생합니다. 그것들을 코드가 약간 다른 작은 10 줄 기능이라고 생각하십시오. 어떻게 든이 구현 사이를 전환하기 위해 git을 사용할 수 있습니까? 그래서 코드의 해당 줄을 바꾸시겠습니까? 분기를 생각했지만이 방법을 적용하는 방법을 모르겠습니다. 모든 구현을 하나의 문제로 전환하고 문제의 조합을 전환하고 싶습니다. (따라서 "X1"은 "Y2", "X2"는 "Y1"등) 그런 다음 성능을 측정하고 사용할 최종 구현을 선택하고 싶습니다. 그것을 달성하기 위해 자식을 사용할 수 있습니까?git은 A/B 테스트, 코드 스왑에 적합합니까?

+0

git 또는 VCS가 A/B 테스트와 관련이 있습니까? 아니면 대답은 단순히 "아니오"입니다. – AD7six

+1

동의, 설명한 문제는 A/B 테스트와 관련이 없습니다. 당신은 단지 디버깅 중입니다. X와 Y가 서로 다른 코드 파일을 가지고 있다면,'git checkout - ' –

+0

을 보면 알 수 없기 때문에 분명히 물었다. 나는 자식에게 새로운데, 내가 모르는 일을 할 수 있을지도 모른다. – Semmu

답변

2

이것은 git의 일반적인 사용법이며, 사용하려는 구현을 선택하는 간단한 구성 파일이 더 나은 접근 방법 일 수 있습니다.

그러나, 자식은 실제로 "교환 코드"에 적합하다, 그래서 당신은이 같은 인스턴스 테스트 다른 구현을 할 수있다 :

이제
$ git init . 
$ git checkout -b impl1 
$ cat <<EOF> main.py 
> print "implementation1" 
> EOF 
$ git add -A && git commit -m "Implementation 1" 
$ git checkout -b master ## You can probably skip this ... 
$ git checkout -b impl2 
$ rm main.py && cat <<EOF> main.py 
> print "implementation2" 
> EOF 
$ git add -A && git commit -m "Implementation 2" 

이 같은 구현 사이를 전환 할 수 있습니다 :

$ git checkout impl1 
$ git checkout impl2 

그 성능을 테스트 해보세요.

$ git checkout impl1 && time python main.py 
Switched to branch 'impl1' 
implementation1 
python main.py 0,02s user 0,01s system 77% cpu 0,040 total 

$ git checkout impl2 && time python main.py 
Switched to branch 'impl2' 
implementation2 
python main.py 0,02s user 0,01s system 91% cpu 0,034 total 

모든 것이 정상적인 것 같습니다. print은 다른 문자열을 인쇄하는 데 거의 같은 시간이 걸립니다. :)

+0

이것은 내가 필요한 것입니다. 실제로 그것은 git의 약간의 비 정통적인 사용이며 여러 문제와 각 문제에 대한 여러 구현에서 제대로 작동하지 않는다고 가정하지만 실제로 답변을 해주시면 감사하겠습니다! – Semmu

0

저는 실제로 Spark에서 수행되는 기계 학습 작업을 위해 EMR 스크립트에 배포 할 때이 작업을 수행하고 있습니다. 클러스터를 실행하고 코드를 체크하고 실험의 일부로 분기를 실행하는 스크립트가 있습니다. 그 결과는 데이터베이스에 저장됩니다. 쉬워요.

좀 더 구체적으로 말하자면, 한 파이프 라인 단계가 다른 파이프 라인 단계 전후로 진행되어야하는지, 또는 아마도 전체적으로 (A/B/C 테스트에서) 빠져 나가야하는지 테스트 할 수 있습니다. 물론 코드 내에서 switch/if/else 문을 사용하여이 작업을 수행 할 수 있지만 가장 좋은 분기를 선택하여 프로덕션 분기에 병합하는 것이 얼마나 쉬운 지와 추가 이점 병렬로 여러 클러스터를 가동하고 A/B/C/etc를 동시에 실행할 수있는 기능을 제공합니다.