从GitHub下载.zip会从文本文件中删除换行符

时间:2013-06-27 15:46:33

标签: git github

我在GitHub上有一个小项目。该项目包括Readme.txt。存储库中的一切工作正常,换行仍然存在,但是当用户从存储库下载.zip文件时,换行符就会消失。

示例:

  

这是一条线   这是另一条线   This is an indented line.

     

这条线远远低于。

变为:

  

这是一条线。这是另一条线。这是预定的路线。这个   线远远低于。

这种行为使Readme.txt很难阅读,特别是如果它有很多缩进。

有没有办法解决这个问题?最好不要改变文件类型。

为了澄清,我的目标是在没有Git的情况下使用GitHub页面中的“Download ZIP”按钮。

4 个答案:

答案 0 :(得分:9)

作为nulltoken explained,这是因为GitHub在Linux机器上运行git archive,默认为linux行结尾。您可以通过为repo中的文件显式设置行结尾来更改此设置。要实现此目的,请在您的仓库的根目录中创建一个包含以下内容的.gitattributes文件并提交。

*.txt eol=crlf

所有GitHub创建的包含该文件的修改包现在所有CRLF个文件中都有.txt行结尾。您可以使用*而不是*.txt将其扩展到所有文件,但我建议不要这样做,因为它会让Linux用户感到悲伤。

答案 1 :(得分:2)

在内部,GitHub的“Download Zip”功能利用git archive

git archive实际执行指向提交的检出,将内容流式传输到tar或zip存档。

在结账过程中处理行结尾的方式最终取决于运行命令的平台。

由于GitHub服务器是基于Linux的,因此文本文件的选定行将是Linux本机服务器(即LF)。

所以(目前)没有办法干扰这个,你的zip / tar下载中的文本文件将被LF终止。

但是你可能还是

  • 使用 Unix2Dos 等工具批量转换文本文件
  • 发送邮件至support@github.com并要求更改其用户界面以便可能选择预期的行结尾

答案 2 :(得分:0)

如果下载zip不适合您,则使用标准git方法git archive

git archive --format zip HEAD ..\repo.zip

这将在repo.zip文件的工作树中创建最新跟踪的已提交文件的压缩版本。您必须在本地仓库中执行它。

答案 3 :(得分:0)

一个比eol=crlf更好的选项,它总是将LF转换为CRLF,是使用-text,它永远不会转换为任何一种方式。

*.patch -text

(我还没有测试过这个。)