Git 制表符到空格+;吉特

Git 制表符到空格+;吉特,git,Git,我和其他几个开发人员一起从事一个项目。不是每个人都使用相同的IDE。最近我意识到代码的某些部分用制表符缩进,而有些部分用空格缩进。当使用tab=4空格来显示代码时,一切看起来都正常,但是其他设置会让它变得非常混乱 我们使用git作为VCS。 是否有任何方法可以重新格式化存储库中的整个代码,提交这些更改并以某种方式保留“错误信息”,您可以编写自己的脚本,用所需的空间量替换选项卡(在您的情况下为4个),然后将其放入.git/hooks/pre-commit否,如果不改写历史,这是不可能的 最简单、对

我和其他几个开发人员一起从事一个项目。不是每个人都使用相同的IDE。最近我意识到代码的某些部分用制表符缩进,而有些部分用空格缩进。当使用tab=4空格来显示代码时,一切看起来都正常,但是其他设置会让它变得非常混乱

我们使用git作为VCS。
是否有任何方法可以重新格式化存储库中的整个代码,提交这些更改并以某种方式保留“错误信息”,

您可以编写自己的脚本,用所需的空间量替换选项卡(在您的情况下为4个),然后将其放入
.git/hooks/pre-commit

否,如果不改写历史,这是不可能的

最简单、对开发人员最友好的解决方案(虽然不会保留错误信息)是在一次提交中修复所有空白问题,然后配置git以拒绝添加混合空白的提交


如果重写历史记录不是您的问题(例如,因为您可以要求所有开发人员丢弃其本地分支并获取重写的分支),您可能可以使用
git filter branch
修复所有提交中的空白。这不会导致新的提交,从而确保更改后
git bull
显示正确的信息。

一个简单的bash脚本可以将每个选项卡替换为4个空格,但您必须在每次提交之前使用它


或者,查看differents ide的设置,使用tab而不是空格。我知道emacs可以做到这一点

我相信你的回答与@AndrejsCainikovs的回答是一致的,因为他的回答将确保以“中立”的方式书写新的历史,而你的回答将使“旧的”历史符合新的要求。重写历史以替换空白不应该太糟糕,不管怎样,这些都可以很容易地从
diff
中忽略。重写历史总是不好的,除非您可以让克隆存储库的每个用户都执行完全相同的重写(如果您有一个脚本,并且他们只需要使用git filter branch调用它,那么这很容易)或者根据旧的历史扔掉他们的分支。你也可以引导他们获取新的东西,并在上面巧妙地重新设置基础。我们在讨论空格的变化。。。因此,这比我们谈论更大的变化要容易得多。我想我可以改写历史。这支队伍没有那么大。但是,如果有人没有重写历史记录(或者没有再次克隆存储库)并尝试推送到源站,会发生什么情况?除非他使用
--force
(在这种情况下,他会在远程repo中撤消历史记录的重写),否则他会得到一个错误。当然不会。你所做的一切都会留下来。但是您可以通过一个单独的提交来解决这个问题:),这使得git责怪毫无用处,除非您明确告诉它使用在空白提交之前的任何版本;)@ThiefMaster实际上,git有一个-w选项,可以忽略空格更改。我可以在中央存储库中设置这些挂钩,以便通过更改克隆/获取它们吗?不幸的是,不能。但是您可以创建一个钩子来检查接收到的提交,如果它们引入了错误的空格,在本例中拒绝推送。