source

Git가 자동으로 공백과 탭 사이를 전환할 수 있습니까?

manycodes 2023. 6. 20. 21:44
반응형

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 책 참조)를 사용하여 스머지/청소 메커니즘을 정의하는 것입니다.

alt text

그런 식으로:

  • 당신이 당신의 레포의 몇몇 파일들을 체크아웃할 때마다, 공간들은 탭으로 변환될 수 있습니다.
  • 그러나 체크인(및 푸시 및 게시) 시 동일한 파일이 공간만 사용하여 다시 저장됩니다.

이 필터 드라이버(여기서 이름 지정)를 선언할 수 있습니다.tabspace') 에서.git/info/attributes(Gitrepo 내의 모든 파일에 적용되는 필터의 경우) 내용은 다음과 같습니다.

*.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'

이러한 오염된/깨끗한 지침 집합의 구체적인 작업 예는 올리비에답변을 참조하십시오.

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개의 공간을 사용하는 경향이 있다면 그렇습니다.

만약 당신이 윈도우에 있다면, 당신은 @Olivier Verdier의 솔루션을 작동시키기 위한 몇 가지 추가적인 단계가 있습니다.

  1. Windows용 CoreUtils 다운로드
  2. 설치 후 PATH에 설치 위치 입력(경로 변수 추가 방법)
  3. 확장 이름을 변경했습니다.확장하기 위해 실행합니다.이미 Windows 확장 유틸리티가 있기 때문에 exe.

언급URL : https://stackoverflow.com/questions/2316677/can-git-automatically-switch-between-spaces-and-tabs

반응형