2011-02-25 4 views
0

모든 버전 제어 기능이없는 Windows 기반 PHP 프로젝트 (CRLF Newlines)가 있습니다. 나는 최근에 그 프로젝트를 내 OSX 머신의 힘내에 넣었다. 다른 개발자가 Git에 있지 않은 동안 (별도의 컴퓨터에서) 소스를 변경 했으므로 이제 해당 변경 사항을 저장소에 병합해야합니다.Windows PHP 프로젝트를 Git으로 마이그레이션하고 OSX 업데이트/패치 적용

필자의 원래 계획은 diff/patch를 사용하여 모든것을 동기화하는 것이 었습니다. 문제는 그가 OSX에 대한 그의 업데이트를 만들었 기 때문에 diff/patch 작업을하기 위해 개행을 변환해야한다는 것입니다.

CRLF 개행을 사용하여 diff 작업을 수행 할 수있는 방법이 있습니까? 내가 읽은 것부터 diff를 적용하기 전에 먼저 LF로 변환해야합니다.

그렇지 않으면 모든 파일을 반복적으로 거쳐 개행 변환을 수행하면됩니까?

나는이 repo를 적절한 방법으로 업데이트하려고합니까?

답변

1

패치를 만들 때 EOL 변경 또는 공백 변경을 무시하는 데 사용하는 도구를 알려줄 수 있어야합니다. 또한 git applygit am에는 공백을 처리하는 방법에 대한 몇 가지 옵션이 있지만 여분의 공백 및 EOL 변경 사항이있는 diff를 처리하는 방법이 확실하지 않으므로 사용하지 않았습니다.

IMHO 진짜 해결책은 모든 것이 LF 라인 엔딩을 repo에서 사용한다면 git가 가장 잘 작동하기 때문에 LF 로의 repo에서 모든 CRLF를 수정하는 것입니다. 필요한 경우 LF를 내부적으로 사용하면서 체크 아웃시 줄 끝이 CRLF로 변경되는 옵션이 있습니다.

+0

의견에 감사드립니다. 당신이 올바른 방향으로 나를 지적했다. –

0

달콤한!

먼저 모든 CRLF를 제거해야했습니다. 나는 내 자식 레포를 rm -rf .git/으로 죽였다. 그럼 나는 느슨하게 GitHub의 Dealing with Line Endings을 따라 갔다.이 스택 오버 플로우는 Q&A이다.

# switch on the conversion of line endings on commit 
$ git config --global core.autocrlf input 

# Initialize 
$ git init 
$ git add . 
$ git commit -m "First Import" 

# If you're doing this on a Unix/Mac OSX clone then optionally remove 
# the working tree and re-check everything out with the correct line endings. 
$ git ls-files -z | xargs -0 rm 
$ git checkout . 

나는 다음 해당 폴더에 대한 diffpatch를 실행하고 최종 commit을 달렸다. 모든 것이 동기화됩니다!

관련 문제