Fuentes de kernel de Linux modificadas en OSX justo después del clon

Cuando clono las fonts de Linux en un sistema operativo X, se cambian de inmediato y se git reset --hard no recupera el contenido. Aquí hay una session completa:

 $ git clone git://github.com/torvalds/linux.git $ cd linux $ git status On branch master Your branch is up-to-date with 'origin/master'. 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") 

Como podemos ver, los files cambiaron justo después de la clonación. Y ni siquiera sus metadatos, sino contenidos :

 git diff include/uapi/linux/netfilter_ipv6/ip6t_HL.h index ebd8ead..6e76dbc 100644 --- a/include/uapi/linux/netfilter_ipv6/ip6t_HL.h +++ b/include/uapi/linux/netfilter_ipv6/ip6t_HL.h @@ -1,6 +1,6 @@ -/* Hop Limit modification module for ip6tables +/* ip6tables module for matching the Hop Limit value * Maciej Soltysiak <solt@dns.toxicfilms.tv> - * Based on HW's TTL module */ + * Based on HW's ttl module */ #ifndef _IP6T_HL_H #define _IP6T_HL_H @@ -8,14 +8,14 @@ #include <linux/types.h> enum { - IP6T_HL_SET = 0, - IP6T_HL_INC, - IP6T_HL_DEC + IP6T_HL_EQ = 0, /* equals */ + IP6T_HL_NE, /* not equals */ + IP6T_HL_LT, /* less than */ + IP6T_HL_GT, /* greater than */ }; -#define IP6T_HL_MAXMODE IP6T_HL_DEC -struct ip6t_HL_info { +struct ip6t_hl_info { __u8 mode; __u8 hop_limit; }; 

Información del sistema:

  • Sistema de files: HFS + de diario
  • Sistema operativo: OS X 10.11.5 (15F34)
  • versión de git: 2.9.0
  • ~/.gitconfig tiene solo [user] input [user] .

Que esta pasando? ¿Por qué se modifican los files justo después de la clonación?

Aunque OS X es un sistema Unix, sigue siendo muy diferente al clon de Unix más conocido, Linux. Esto se debe a razones históricas ya que OS X es esencialmente NextStep (que en su momento fue una versión revolucionaria de Unix) con muchas cosas de FreeBSD, y Linux es un kernel escrito desde cero con una gran cantidad de Cosas de GNU, así como razones políticas, ya que OS X fue diseñado para sacar provecho de MacOS 9.

Por lo tanto, es habitual que el sistema de files HFS pnetworkingeterminado no distinga entre mayúsculas y minúsculas (como Windows NTFS) en comparación con Linux, que tradicionalmente distingue entre mayúsculas y minúsculas. En otras palabras, ¿"A.txt" y "a.txt" hacen reference al mismo file o no?

Git está diseñado por Linus Torvalds, que también es el arquitecto del kernel de Linux para manejar las fonts del núcleo, por lo que naturalmente tiene una mentalidad de Linux y espera que los files con nombres diferentes sean diferentes.

Para la mayoría de los usos, esto no importa, pero usted ha tocado una de las situaciones en que lo hace, es decir, si hay múltiples files en un repository de git con los mismos nombres si los clona en un sistema de files que no distingue entre mayúsculas y minúsculas. Dado "A.txt" y "a.txt" de nuevo, para Linux ambos files existirán después del clon, pero para el sistema de files HFS pnetworkingeterminado en OS X solo existirá un file, el creado el último (que luego se sobrescribirá) El anterior.

Tenga en count que git todavía piensa que ambos files están presentes ya que el sistema de files dice que "A.txt" y "a.txt" están presentes cuando se le pregunta. Es por eso que no le dicen que uno de ellos está perdido.

La cura es simple. Haz tu trabajo usando un sistema de files sensible a mayúsculas y minúsculas. Para OS X, la forma más sencilla es crear una image de disco adecuada utilizando la Utilidad de Discos -> Archivo -> Nueva Imagen y elegir la versión correcta de OS X extendido como formatting. Luego haz doble clic en la image para montarla, y navega hacia ella en Terminal.app. Entonces haz el clon. Ahora debería tener las fonts correctas.

Tenga en count, sin embargo, que lo más probable es que no pueda hacer nada con él, como build o similar, ya que la cadena de herramientas del comstackdor OS X es muy diferente de la de Linux. Si quiere comstackr un kernel nuevo, lo más simple es hacerlo en Linux. Virtualbox plus Ubuntu 16.04 funciona muy bien para mí.