git은 공백과 탭을 자동으로 전환 할 수 있습니까? git이 공백과 탭

파이썬 프로그램에서 들여 쓰기에 탭을 사용하지만 대신 공백을 사용하는 사람들과 협력하고 싶습니다 (git 사용).

푸시 / 페치시 git이 공백과 탭 (예 : 4 공백 = 1 탭) 사이를 자동으로 변환하는 방법이 있습니까? (CR / LF 변환과 유사)



답변

완벽한 솔루션은 다음과 같습니다.

저장소에서 .git/info/attributes다음을 포함 하는 파일 을 추가하십시오 .

*.py  filter=tabspace

리눅스 / 유닉스

이제 다음 명령을 실행하십시오 :

git config --global filter.tabspace.smudge 'unexpand --tabs=4 --first-only'
git config --global filter.tabspace.clean 'expand --tabs=4 --initial'

OS X

먼저 brew와 함께 coreutils를 설치하십시오.

brew install coreutils

이제 다음 명령을 실행하십시오 :

git config --global filter.tabspace.smudge 'gunexpand --tabs=4 --first-only'
git config --global filter.tabspace.clean 'gexpand --tabs=4 --initial'

모든 시스템

이제 프로젝트의 모든 파일을 확인할 수 있습니다. 당신은 그것을 할 수 있습니다 :

git checkout HEAD -- **

모든 파이썬 파일에는 공백 대신 탭이 있습니다.

편집 : 강제 체크 아웃 명령을 변경했습니다. 물론 일을 먼저해야합니다.


답변

예, 잠재적 해결책 중 하나는 git 속성 필터 드라이버 ( GitPro book 참조 )를 사용하여 얼룩 / 청소 메커니즘을 정의하는 것입니다.

그런 식으로:

  • repo의 일부 파일을 체크 아웃 할 때마다 공백이 탭에서 변환 될 수 있습니다.
  • 그러나 체크인 (및 푸시 및 게시) 할 때 동일한 파일은 공백 만 사용하여 다시 저장됩니다.

Git 저장소 내의 모든 파일에 적용되는 필터에 대해이 필터 드라이버 (여기 이름은 ‘ tabspace‘)를 .git/info/attributes다음과 같은 내용으로 선언 할 수 있습니다 .

*.py  filter=tabspace

이제 다음 명령을 실행하십시오 :

# local config for the current repo
git config filter.tabspace.smudge 'script_to_make_tabs'
git config filter.tabspace.clean 'script_to_make_spaces'

이러한 얼룩 / 깨끗한 지침 세트의 구체적인 작업 예는 Olivier답변 을 참조하십시오 .


답변

GitHub (또는 기타 유사한 서비스)를 사용하는 모든 사람에게 매우 유용한 정보

~/.gitconfig

[filter "tabspace"]
    smudge = unexpand --tabs=4 --first-only
    clean = expand --tabs=4 --initial
[filter "tabspace2"]
    smudge = unexpand --tabs=2 --first-only
    clean = expand --tabs=2 --initial

그런 다음 두 개의 파일이 있습니다.
attributes

*.js  filter=tabspace
*.html  filter=tabspace
*.css  filter=tabspace
*.json  filter=tabspace

attributes2

*.js  filter=tabspace2
*.html  filter=tabspace2
*.css  filter=tabspace2
*.json  filter=tabspace2

개인 프로젝트 작업

mkdir project
cd project
git init
cp ~/path/to/attributes .git/info/

그렇게하면 마침내 github에서 작업을 푸시 할 때 8 space tabs모든 브라우저에서 기본 동작 인 코드보기에서 바보처럼 보이지 않습니다 .

다른 프로젝트에 기여

mkdir project
cd project
git init
cp ~/path/to/attributes2 .git/info/attributes
git remote add origin git@github.com:some/repo.git
git pull origin branch

이렇게하면 2 space indented프로젝트 에서 일반 탭으로 작업 할 수 있습니다.

물론 4 space to 2 space내가 게시 한 프로젝트에 기여하고 개발하는 동안 2 개의 공백을 사용하는 경향이있는 경우 유사한 변환 솔루션을 작성할 수 있습니다 .


답변

Windows를 사용하는 경우 @Olivier Verdier의 솔루션을 작동 시키기 위한 몇 가지 추가 단계 가 있습니다.

  1. Windows 용 CoreUtils 다운로드
  2. 설치 후 PATH에 설치 위치를 넣으십시오 ( 경로 변수를 추가하는 방법 )
  3. Windows 확장 유틸리티가 이미 있으므로 expand.exe의 이름을 gexpand.exe로 변경했습니다.