【问题标题】:Git gets file hungry every once in a whileGit 每隔一段时间就会饿死文件
【发布时间】:2010-10-05 15:50:56
【问题描述】:

我的 Git 存储库经常出现问题。我在 Windows 中开发,我的生产站点在 Linux 下。有好几次,git 将所有跟踪的文件显示为已修改。我以为这是因为 Windows 和 Linux 之间的 conf 问题或冲突,但是今天早上,当我检查 Linux 存储库时,它显示所有文件都已修改。

雪上加霜,我使用的两个 Linux 存储库(1 个用于生产,1 个用于测试)显示相同。我别无选择,只能提交所有文件,因为硬重置或签出不会对工作目录进行任何更改(是的,我对此非常糟糕)。这是提交的结果:

Created commit #######: Git, you are so mean...
1521 files changed, 302856 insertions(+), 302856 deletions(-)

有什么想法在下次发生时如何解决?

【问题讨论】:

    标签: git


    【解决方案1】:

    正如 Bombe 所说,这听起来像是一个行尾问题。我在 Github 上看到的最简单的讨论是 this guide

    你想在你的 Windows 系统上设置core.autocrlf,这样当你从 repo 签出到工作目录时 Git 会自动将行尾更改为 CRLF,反之,当你将文件提交到 repo 时,将所有 CRLF 更改为 LF:

    $ git config --global core.autocrlf true
    

    然后,您可以通过从 Linux 存储库克隆或通过git reset 来确保您的存储库具有一致的行尾,这会检查出一个新的工作副本,该副本将新的 autocrlf 设置应用于所有 LF:

    $ git reset --hard HEAD
    

    编辑——如果 Git 不能将文件识别为二进制文件,autocrlf 可以通过更改它认为是 CRLF 或 LF 的内容来破坏文件。如果您的存储库包含不寻常的二进制格式文件类型,请在 .gitattributes 中明确声明其转换类型,如 manpage 中所述。

    【讨论】:

    • git 具有相当全面的启发式方法来检测文件是否为二进制文件。它破坏音频或图像文件的情况极为罕见。 .gitattributes 是指定某些文件或 glob 是二进制文件的地方。将它们放入 .gitignore 将停止 git 完全跟踪它们。
    • 谢谢,查尔斯。我对数字文件(我认为是 CAF 文件和 Illustrator 文件)的糟糕体验是在去年夏天——我很高兴知道它已经过时了。
    • 我们需要在 windows comp 上将 autocrlf 设置为 FALSE,而不是 true,才能使其工作(使用 msysgit)。
    【解决方案2】:

    听起来像是一个行尾问题。在man git-config 中查看core.autocrlf

    【讨论】:

    • 这仅对 Windows 重要还是在 Linux 上也值得这样做?
    • 我不知道,到目前为止我只在 Linux 下使用过 Git,而且我从来不需要摆弄这些设置。
    • 如果您曾经收到来自 Windows 的文件,您可能需要考虑 core.autocrlf=input,它会进行单向 windows->unix 转换(如果适用)。
    【解决方案3】:

    我认为您需要解决的真正问题是文件有何不同以及您期望看到的差异是什么?

    传统的默认设置是 git 根本不会将 git add 上的文件内容更改到存储库。最新的 windows git 安装程序启用了 core.autocrlf,它在结帐时将 unix 转换为 windows 行尾,而在添加到存储库时则相反。

    因此,如果您有更多预期的未跟踪更改,最好git add 所有待处理的文件(例如通过git add -u)。

    在这个阶段,任何清洁/涂抹过滤器都将被应用,git diff --cached 应该给出合理的差异。

    如果您有 git 认为不同的暂存文件,但差异不可见,您可能需要查看原始字节以查看不可见字符是否有任何差异。

    您可以为此使用诸如hexdump 之类的工具。

    假设myfile.txt 有不可见的差异,您可能想尝试这样的方法。

    # Extract raw versions of the differing files and hexdump to some temporary files
    git cat-file blob :myfile.txt | hexdump -C >myfile-stagetmp.bytes
    git cat-file blob HEAD:myfile.txt | hexdump -C >myfile-headtmp.bytes
    
    # Diff them. (Yes, you don't have to use git diff!)
    git diff --no-index myfile-stagetmp.bytes myfile-headtmp.bytes
    

    【讨论】:

      猜你喜欢
      • 2012-03-02
      • 2023-04-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-26
      • 1970-01-01
      • 1970-01-01
      • 2011-01-25
      相关资源
      最近更新 更多