![在 BitBucket 上推送到 Git 存储库时文件损坏](https://linux22.com/image/1461965/%E5%9C%A8%20BitBucket%20%E4%B8%8A%E6%8E%A8%E9%80%81%E5%88%B0%20Git%20%E5%AD%98%E5%82%A8%E5%BA%93%E6%97%B6%E6%96%87%E4%BB%B6%E6%8D%9F%E5%9D%8F.png)
这种情况已经发生过两次了。第一次是 4 或 5 个文件。第二次只有一个,但当时我只推送了一个。我正在使用 Visual Studio 2013 编辑 PowerShell 脚本。我不知道这是否相关,因为我认为当 Git 处理它们时它们只是 UTF-8 文件。我不确定是在提交还是推送时,但我的文件变得混乱了。干净时的前几行示例:
$Start=Get-Date
$Global:Timings=@()
$Global:Timings+=1
#$Global:Timings+=2
function Stamp($msg){ $Global:Timings += @{Date=(Get-Date).addseconds(4);Message=$msg} }
我在工作时推送了它,当我回到家并拉取它时,我得到了: http://pastebin.com/EgVzZZHs
新文件里全是中文字符。我不得不使用 pastebin,因为超级用户不允许使用这些字符。根据一些文件分析,原始文件是 UTF-8,而新文件是 UTF-16 Big Endian。该文件在 Notepad、SciTe、Visual Studio、WinMerge 和 Tortoise Git 中的工具中看起来同样混乱。我怀疑(基于我对上次发生这种情况的记忆)但目前无法验证,我工作磁盘上的文件不会有问题。我不知道 Git 的索引是否会被弄乱,但我认为如果我拉动,好文件将被坏文件替换。两个客户端都是 Windows 7。远程存储库在 BitBucket 上。它只有一周左右的历史。有人知道发生了什么和/或如何防止它吗?我对此非常沮丧。非常感谢!
答案1
我意识到这是一个老问题,但它是我在 Google 上第一次看到的。
您说得对,问题在于文件编码不是 UTF-8。但是我认为编码切换发生在您推送到 Bitbucket 之前。如果您有未损坏的文件副本,则可以使用 Sublime Text 或 Notepad++ 轻松修复此问题。只需在 Sublime Text 中打开有问题的文件,粘贴正确的代码,然后使用文件->使用编码保存->UTF-8 命令。然后将其推送回 Bitbucket。我还注意到,文件在 Bitbucket 界面上显示正确,即使在拉出后会变得混乱。因此,您可能能够直接从 Bitbucket 界面复制代码。
https://stackoverflow.com/questions/21289157/set-encoding-of-file-to-utf8-with-bom-in-sublime-text-3