【发布时间】:2017-06-27 00:41:26
【问题描述】:
首先,我是 git 的新手。就像,如果它在暂存区击中我,我几乎无法从索引中分辨出缓存。或类似的东西。有了这个,我的问题是:
假设我想从事一个项目,其编码风格要求使用空格进行缩进,但我喜欢制表符。似乎我可以使用清洁和涂抹功能,但有一个问题。编码风格并不一致,有些文件在同一行混合了制表符和空格。因此,一种天真的方法会导致我进行单行更改,但意外地创建了一个大规模提交,这使项目完全符合其自己的标准。这会很好,只是差异会不那么有用,所以我最终会遇到新的敌人。
所以问题是:有没有办法让这种魔法发挥作用,如果我不触摸文件,它就不会出现在图片之外? (即使我只更改了一个字符,我也愿意对我接触的文件的空白承担全部责任。)
编辑:好的,我刚刚接受了昨天接受的答案。我很确定这对我很粗鲁。我的借口是我今天才开始测试它。由于显然已经有两个人误解了我,让我弄清楚我实际上做了什么,所以也许有人可以告诉我我是否感到困惑和/或困惑。
$ ls -a
. .. t.txt
$ hd t.txt # file contains 3 bytes: a tab, a capital A, and a newline
00000000 09 41 0a |.A.|
00000003
$ git init
Initialized empty Git repository in /home/marvy/test/.git/
$ git config --local git config --local user.name me
$ git config --local user.email me@example.com
$ git add t.txt
$ git commit
[master (root-commit) 959bf99] testing cleverness of git status
1 file changed, 1 insertion(+)
create mode 100644 t.txt
$ echo '*.txt filter=tabspace' > .git/info/attributes
$ cat .git/info/attributes
*.txt filter=tabspace
$ git config --local filter.tabspace.smudge unexpand
$ git config --local filter.tabspace.clean expand
$ rm t.txt
$ git checkout t.txt
$ git status
On branch master
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: t.txt
no changes added to commit (use "git add" and/or "git commit -a")
$ git help --stackoverflow
正如我们在这里看到的,git status 报告 t.txt 已被修改,即使我刚刚检查了它。如果你运行 git diff,它会声称我想将制表符转换为空格。我做错了吗?
【问题讨论】:
-
没有回答你的问题,但我很好奇你为什么要这么麻烦。当编辑器相当愚蠢的时候,我也非常喜欢制表符而不是空格。但是由于 IDE 编辑器的语法意识越来越强,我很难区分它们。您使用什么编辑器来编辑标签实际上更容易?
-
在你最喜欢的编辑器中试试这个。将光标定位在一行的“开头”;即第一个非空白字符。现在按键盘上的左箭头键。会发生什么?
-
好的。我很少或从不需要这样做。
-
真的吗?我可能会在任何给定的时间内多次这样做,如果它真的正常工作,我会做得更多。我想每个人都不一样:)
标签: git whitespace