我在python程序中使用制表符缩进,但我想与使用空格的人合作(使用git)。
git是否有办法在推/取时自动在空格和制表符之间进行转换(例如,4个空格= 1个制表符)? (类似于CR / LF转换)
答案 0 :(得分:189)
以下是完整的解决方案:
在您的存储库中,添加一个文件.git/info/attributes
,其中包含:
*.py filter=tabspace
<强>的Linux / Unix 强>
现在运行命令:
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 -- **
并且所有python文件现在都有标签而不是空格。
编辑:更改了强制结帐命令。当然,你应该先做好你的工作。
答案 1 :(得分:129)
是的,一个可能的解决方案是使用git attribute filter driver(另请参阅GitPro book)来定义涂抹/清洁机制。
那样:
您可以在tabspace
中声明此过滤器驱动程序(在此处命名为“.git/info/attributes
”)(对于应用于Git仓库中所有文件的过滤器),其中包含以下内容:
*.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'
答案 2 :(得分:36)
~/.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个空格。
答案 3 :(得分:1)
如果您使用的是Windows,那么您需要执行一些额外步骤才能使@Olivier Verdier's解决方案正常运行。