在git repo上替换/ \ t / with / /

时间:2016-04-17 17:17:24

标签: git repository

昨晚制作一些我从别人那里继承的遗留代码已经太晚了。除了将事物置于版本控制之外,我还希望将代码库从标签转换为空格。在我的工作目录中用两个空格替换所有制表符。递归。包括.git目录。我做了一些改变并承诺了,但还没有在其他任何地方推销回购。

如果我只是必须重新开始回购并将变化压缩到一次提交中,这并不是一个巨大的损失,但假设我要付出努力,这种情况有多可恢复?

在某种程度上,我很高兴在我走得太远之前犯了这个错误,但是假设这是一个长达数年的项目的唯一副本,你会变得多么紧张?

1 个答案:

答案 0 :(得分:1)

  

递归。包括.git目录   首先,您需要验证您的.git文件夹是否已损坏"。

# Verify that the .git folder and all the objects are still usable
git fsck --full

如果您没有看到并悬空数据,那么您就可以了。

  

但还没有将回购推送到其他任何地方

即使你按下(除非你强行推动),你仍然可以恢复所有以前的数据

  

在某种程度上,我很高兴在我走得太远之前犯了这个错误,但是假设这是一个长达数年的项目的唯一副本,你会变得多么紧张?

如果你没有备份,你将遇到巨大的麻烦。这是一个可以恢复的情况,但需要做很多工作。

如何从此错误中恢复?

如果您已将所有选项卡替换为空格,反之亦然,则必须再次尝试替换它们,好处是git具有SHA-1,即内容的sha1sum(内容)本身是压缩的,里面的格式不应包含任何空格。

很短(比它复杂一点)git计算以下内容的SHA-1并压缩它:

blob<space><content_lengt><null><content>

然后git用zlib压缩上面的内容。因此,如果您知道如何存储文件,您可以尝试恢复它们,但它需要做很多工作。另一方面,内容中不应该有空格,所以你在内部(.git/object)搞乱的几率很小。

<强> Summary

无论你做什么 从不 触摸.git文件夹!!!

enter image description here