2011-02-19 3 views
11

사람들은 지역과 원격 사이에서 다른 세방을 어떻게 다루겠습니까?힘내 : 다른 세방을 다루는 방법

예를 들어 나의 로컬 파이썬은/usr/bin/python이지만 내 웹 호스트는 ~/local/bin/python의 목적으로 만들어진 파이썬입니다. 리드 개발자는/usr/bin/ruby에 루비를 가지고있는 반면, 광산은/usr/local/bin/ruby에있을 수 있습니다.

나는 수동으로 수정판을 편집하지만 변경된 것으로 표시합니다. 이상적으로, 나는 파일의 첫 줄을 무시하거나 파일 내의 줄의 정규식 일치를 무시하고 싶다.

이것은 매우 일반적인 문제 여야합니다. 그러나 나는 그것에 대한 언급을 찾을 수 없습니다.

전 git을 사용하지만 전문가라고는 말할 수 없습니다.

#!/usr/bin/env python 

또는

#!/usr/bin/env ruby 

+5

'#!/usr/bin/env python'을위한 것이 아닌가요? – coreyward

+0

@coreyward : [이 질문에] (http://unix.stackexchange.com/q/29608/10454) 및 [내 대답] (http://unix.stackexchange.com/a/29620/10454)을 참조하십시오. '#!/usr/bin/env' 해킹의 이점과 단점에 대한 토론. –

답변

18

변경은 그 다음 당신이 당신의 PATH 환경 변수에서 파이썬과 루비를 제공, 모든 시스템에서 작동합니다.

+0

PATH가 문제입니다. 내 웹 호스트에 ~/local/bin/python에 사용자 정의 파이썬이 있습니다. 루트 권한이 없기 때문에 웹 서버의 PATH를 변경할 수 없습니다. 내가 당기거나 밀 때마다 속박을 바꾸어야하는 것은 짜증이납니다. –

+0

[계속 ...] 내 진짜 질문은 "라인 레벨에서 원자가 될 수 있을까?"였고 대답은 "아니오, 파일 수준에서 원자"입니다. –

+0

아마 루트가 필요하지 않습니다. 어떻게 스크립트를 실행하고 있습니까? 명령 줄? 웹 페이지를 통해? Cron을 통해? – Mikel

0

이것은 주석에 포함되어 있지만 아직 충분한 평판이 없습니다 ... 해시 뱅을 제거하고 명령 줄에서 실행할 때 항상 python으로 실행할 수 있습니다 ...

3

문제의 해결책은 git의 smudge/clean 필터 규칙입니다. 이렇게하면 체크 아웃시 파일을 수정하고 체크인시 변경 사항을 취소하는 필터를 설정할 수 있습니다. 여기에 좋은 그래픽입니다 :

enter image description here

이 먼저 당신 .git/config에 다음과 같은 것을 추가하여, 양 방향의 변화를 할 수있는 필터를 설정합니다. 스 머지 필터는 저장소에있는 파일을 작업 복사본으로 변환하며, 클린 필터는 변경된 파일을 실행 취소합니다. smudge -> clean을 실행하면 원본 파일과 정확하게 일치해야합니다. 가/정보/속성 (즉, 파일을 생성 .git하는

[filter "pyshebang"] 
    smudge = sed '1s?^#!/usr/bin/env python$?#!~/local/bin/python?' 
    clean = sed '1s?^#!~/local/bin/python$?#!/usr/bin/env python?' 

지금과 같은 줄을 추가하여이 필터를 활성화 REPO에 #!/usr/bin/env python 경우 여기에 지정된 필터는 작업 복사본에 #!~/local/bin/python와 첫 줄을 대체합니다 가) 존재하지 않는 경우 :

*.py filter=pyshebang 

를 파이썬 파일 .py로 끝나지 않는 경우, 단지 올바른 파일/전체 폴더/모든 파일에 필터를 구성합니다. 필터를 올바르게 설정하면 파이썬 셰번과 함께 파일이 변경됩니다.

무슨 일인지 자세히 알아 보려면 smudge filters을 읽어 보시기 바랍니다.

+0

왜 downvote? – Chronial

관련 문제