Git每隔一段时间就会感到饥饿

时间:2009-02-05 11:52:37

标签: git

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

为了增加对伤害的侮辱,我使用的两个Linux repos(1个用于prod,1个用于测试)显示相同。我别无选择,只能提交所有文件,因为硬重置或结账都没有对工作目录进行任何更改(是的,我非常喜欢这个)。这是提交的结果:

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

关于如何在下次发生时对此进行排序的任何想法?

3 个答案:

答案 0 :(得分:9)

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

您希望在Windows系统上设置core.autocrlf,以便当您从repo签出到工作目录时Git会自动将行结尾更改为CRLF,并在将文件提交到工作目录时相反地将所有CRLF更改为LF回购:

$ git config --global core.autocrlf true

然后,您可以通过克隆Linux repo或git reset来确保您的repo具有一致的行结尾,$ git reset --hard HEAD 检出新的工作副本,将新的autocrlf设置应用于所有LF:

autocrlf

编辑 - 如果Git无法将文件识别为二进制文件,.gitattributes可能会通过更改其认为的CRLF或LF来破坏文件。如果您的repo包含不常见的二进制格式文件类型,请在{{1}}中明确声明其转换类型,如manpage中所述。

答案 1 :(得分:6)

听起来像一个行结束的问题。点击man git-config查看core.autocrlf

答案 2 :(得分:0)

我认为你需要解决的真正问题是,文件是如何不同的,是你期望看到的差异?

传统的默认设置是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