簡體   English   中英

OS X上的Git:預修改的文件?

[英]Git on OS X: pre-modified files?

我在OS X上使用Git,特別是龐大的Linux存儲庫。 問題:當我檢出特定分支時,當我希望有一個干凈的目錄樹時,我會發現已經有修改過的文件:

mbpe:linux griscom$ git checkout --force 6407198
HEAD is now at 6407198... sdhci: add no-sd-uhs-sdr104 devicetree property
mbpe:linux griscom$ git status
HEAD detached at 6407198
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

    modified:   include/uapi/linux/netfilter/xt_connmark.h
    modified:   include/uapi/linux/netfilter/xt_dscp.h
    modified:   include/uapi/linux/netfilter/xt_mark.h
    modified:   include/uapi/linux/netfilter/xt_rateest.h
    modified:   include/uapi/linux/netfilter/xt_tcpmss.h
    modified:   include/uapi/linux/netfilter_ipv4/ipt_ecn.h
    modified:   include/uapi/linux/netfilter_ipv4/ipt_ttl.h
    modified:   include/uapi/linux/netfilter_ipv6/ip6t_hl.h
    modified:   net/netfilter/xt_dscp.c
    modified:   net/netfilter/xt_hl.c
    modified:   net/netfilter/xt_rateest.c
    modified:   net/netfilter/xt_tcpmss.c

no changes added to commit (use "git add" and/or "git commit -a")
mbpe:linux griscom$ 

這是真正有趣的部分:如果我嘗試擺脫這些“修改過的”文件,則會得到一組新的修改過的文件,其中某些字符大小寫已更改:

mbpe:linux griscom$ git reset --hard
HEAD is now at 6407198 sdhci: add no-sd-uhs-sdr104 devicetree property
mbpe:linux griscom$ git status
HEAD detached at 6407198
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

    modified:   include/uapi/linux/netfilter/xt_CONNMARK.h
    modified:   include/uapi/linux/netfilter/xt_DSCP.h
    modified:   include/uapi/linux/netfilter/xt_MARK.h
    modified:   include/uapi/linux/netfilter/xt_RATEEST.h
    modified:   include/uapi/linux/netfilter/xt_TCPMSS.h
    modified:   include/uapi/linux/netfilter_ipv4/ipt_ECN.h
    modified:   include/uapi/linux/netfilter_ipv4/ipt_TTL.h
    modified:   include/uapi/linux/netfilter_ipv6/ip6t_HL.h
    modified:   net/netfilter/xt_DSCP.c
    modified:   net/netfilter/xt_HL.c
    modified:   net/netfilter/xt_RATEEST.c
    modified:   net/netfilter/xt_TCPMSS.c

no changes added to commit (use "git add" and/or "git commit -a")
mbpe:linux griscom$ 

到底他媽發生了什么???

答案是:默認的OS X文件系統不區分大小寫(盡管保留大小寫),並且Linux存儲庫中有許多對文件,只是大小寫不同。 實際上,以上兩個文件列表正是存儲庫中大小寫沖突的文件對。

因此,git認為有兩個文件,而OS X文件系統認為只有一個。 在檢出所有文件的過程中,這兩個文件彼此重疊,並且當檢查更改時,git將其視為每對文件中的一個更改。 重置存儲庫時,每對的“已修改”文件都是未修改的,但這不可避免地會修改先前的“未修改”文件。

這帶來了兩個學術問題:

  • 為什么git(它很容易檢測到此問題)沒有給出智能錯誤消息?
  • 誰認為在Linux存儲庫中只有大小寫不同的文件是個好主意?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM