git可以在空格和制表符之间自动切换吗?

时间:2010-02-23 08:26:04

标签: git tabs indentation

我在python程序中使用制表符缩进,但我想与使用空格的人合作(使用git)。

git是否有办法在推/取时自动在空格和制表符之间进行转换(例如,4个空格= 1个制表符)? (类似于CR / LF转换)

4 个答案:

答案 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)来定义涂抹/清洁机制。

alt text

那样:

  • 每次签出回购邮件的某些文件时,可以在标签中转换空格
  • 但是当您办理登机手续(以及推送和发布)时,这些相同的文件仅使用空格存储起来。

您可以在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'

请参阅Olivieranswer,了解这类涂抹/清洁说明的具体实例。

答案 2 :(得分:36)

使用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个空格。

答案 3 :(得分:1)

如果您使用的是Windows,那么您需要执行一些额外步骤才能使@Olivier Verdier's解决方案正常运行。

  1. 下载CoreUtils for windows
  2. 安装完成后,将安装位置放入PATH(How to add a path variable
  3. 我将expand.exe重命名为gexpand.exe,因为已经有一个Windows扩展实用程序。